[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Question about lua socket ftp example.
- From: Rena <hyperhacker@...>
- Date: Tue, 12 Mar 2013 23:13:14 -0400
On Tue, Mar 12, 2013 at 11:09 PM, albert <albert_200200@126.com> wrote:
> Rena, you are so kind. The explaination is so good, it really unlock my
> mind. The question makes me confuse for a long time.
> I have another question then,
>
> if r then val = table.concat(t) end
> How could it work? table.concat(t) concat nothing to the the table t.
>
>
> On 2013/3/13 10:55, Rena wrote:
>>
>> On Tue, Mar 12, 2013 at 10:29 PM, albert <albert_200200@126.com> wrote:
>>>
>>> The example code is in the link:
>>>
>>> http://w3.impa.br/~diego/software/luasocket/old/luasocket-2.0-beta/ftp.html
>>> 1 require("ftp")
>>> 2 require("ltn12")
>>> 3 require("url")
>>> 4 function ls(u)
>>> 5 local t= {}
>>> 6 local p = socket.url.parse(u)
>>> 7 p.command = "nlst"
>>> 8 p.sink = ltn12.sink.table(t)
>>> 9 local r, e = socket.ftp.get(p)
>>> 10 return r and table.concat(t), e
>>> 11 end
>>>
>>> I don't understand line 10, Does that mean "return (r and
>>> table.concat(t)),
>>> e"?
>>> r is a string, Then what does "r and table.concat(t)" mean?
>>>
>>>
>> It's what you wrote there, (r and table.concat(t)), e. It's using
>> boolean short-circuiting. A longer way to write it would be:
>> local val
>> if r then val = table.concat(t) end
>> return val, e
>>
>> in both cases, if r is nil or false, the table.concat part of the
>> expression is ignored and the value returned is nil. socket.ftp.get
>> most likely returns (nil, error_message) on failure, so in that case
>> this function would also return (nil, e). It's comparable (but not
>> identical!) to C's ternary operator.
>>
>
>
>
See http://www.lua.org/manual/5.2/manual.html#pdf-table.concat
it concatenates the table's contents into a string.
--
Sent from my Game Boy.