[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Issues with the current varargs implementation (Was: Re: inadequate documentation for select and table.unpack)
- From: Sean Conner <sean@...>
- Date: Tue, 21 Jun 2016 15:59:35 -0400
It was thus said that the Great Patrick Donnelly once stated:
> On Tue, Jun 21, 2016 at 3:22 PM, Soni L. <fakedme@gmail.com> wrote:
> > But varargs (and thus varargs-based arrays) are nil-safe by default.
>
> Show me in the manual where it says **tables** are not nil safe and
> I'll stop posting to lua-l*.
Lua 5.3, section 3.4.7:
Unless a __len metamethod is given, the length of a table t is only
defined if the table is a sequence, that is, the set of its positive
numeric keys is equal to {1..n} for some non-negative integer n. In
that case, n is its length. Note that a table like
{10, 20, nil, 40}
is not a sequence, because it has the key 4 but does not have the
key 3. (So, there is no n such that the set {1..n} is equal to the
set of positive numeric keys of that table.) Note, however, that
non-numeric keys do not interfere with whether a table is a
sequence.
But for this discussion:
function foo(...) print(select('#',...) end
function bar(t) print(#t) end
foo(1,2,3,4)
4
bar{1,2,3,4}
4
foo(nil,nil,3,nil)
4
bar{nil,nil,3,nil}
0
-spc