• Subject: Re: Issues with the current varargs implementation (Was: Re: inadequate documentation for select and table.unpack)
• From: Patrick Donnelly <batrick@...>
• Date: Tue, 21 Jun 2016 16:15:02 -0400

```On Tue, Jun 21, 2016 at 3:59 PM, Sean Conner <sean@conman.org> wrote:
> 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

There's an echo in this room. Apparently emphasizing **tables** is
lost on people so let me be crystal clear: table length is only
defined for sequences. __So__, while sequences are not nil-safe, that
does __not__ mean tables are not nil-safe.

--
Patrick Donnelly

```

• Follow-Ups:
• References: