lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


OK, so to fix this problem I need to tell it exactly how many results
I want. My function:

function f(s)
    if string.byte(s) == 42 then
        -- do stuff if and only if s starts with "*"
    end
end

Should be instead:

function f(s)
    local b = string.byte(s) -- make the number of results expected explicit
    if b == 42 then -- etc

Thanks,
Vaughan

2009/1/25 Alexander Gladysh <agladysh@gmail.com>:
> On Sun, Jan 25, 2009 at 12:30 AM, Peter Cawley <lua@corsix.org> wrote:
>> On Sat, Jan 24, 2009 at 9:08 PM, Alexander Gladysh <agladysh@gmail.com> wrote:
>>> In Lua "to return zero values" is the same as to return nil.
>> No, they are not the same. The number of return values from a function
>> call is corrected to number of results which the caller is expecting
>> either by appending nils, or truncating the last value(s). In many
>> contexts, like assigning the results of a function to variables, or
>> performing a table index on the result of a function, the number of
>> results is set explicitly by the caller. In other contexts, like the
>> end of an argument list for function calls and table constructions, no
>> appending or truncating is done.
>
>> Hence the visible behaviour of returning zero values is the same
>> visible behaviour as returning nil, in certain contexts. In all
>> contexts, the non-visible behaviour is different, and in some
>> contexts, the visible behaviour is different.
>
> Wow. You're right.
>
> $ lua
> Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
>> f = function() end
>> print(type(f()))
> stdin:1: bad argument #1 to 'type' (value expected)
> stack traceback:
>        [C]: in function 'type'
>        stdin:1: in main chunk
>        [C]: ?
>> ff = function() return nil end
>> print(type(ff()))
> nil
>
> I didn't know this.
>
> Thank you,
> Alexander.
>