[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Table behavior in Lua 5.4
- From: Scott Morgan <blumf@...>
- Date: Mon, 19 Jul 2021 09:23:45 +0100
On 19/07/2021 06:50, William Ferguson wrote:
> If I populate a table then read it back like this
...
> I get the following output
>
> lua table has length 1.000000 1.000000 - string 3.000000 - number
>
> In Lua 5.3 I get
>
> lua table has length 1.000000 1.000000 - string
>
> Is this a bug, or am I missing something?
>
This is a common mistake people new to Lua make.
http://www.lua.org/manual/5.4/manual.html#3.4.7
> The length operator applied on a table returns a border in that
> table. A border in a table t is any natural number that satisfies the
> following condition:
>
> (border == 0 or t[border] ~= nil) and t[border + 1] == nil
>
> In words, a border is any (natural) index present in the table that
> is followed by an absent index (or zero, when index 1 is absent).
(read the whole section, this is just a key part)
If you want to use a table as an array, you need to make sure all
indexes are set (no nils), or set a metatable that specifies the __len
function. Also using lua_geti makes more sense in this case, as lua_next
will traverse all keys, both integer and other types.
Scott