lua-users home
lua-l archive

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

On 07/01/2013 08:44 PM, Roberto Ierusalimschy wrote:
Much more serious, for me, is the incompatibility that t[#t] = nil will
not "pop" elements form a list (and. of course, the extra complexity).

-- Roberto

That's why I suggested to have a new standard library "array". It won't be a new native Lua type. It's more or less just a standard metatable for array type tables. The only difference between an array and a sequence is, the array stores its length 'n' explicitly and therefore allows to have nils in it. Also the length is always set explicitly at construction or by calling setlength(n).

The metatable defines __len and __ipairs: The # oparator will always return n. The __ipairs always iterates from 1 to n, and doesn't care if there are nils in its way.

This is the minimal functionality needed. One could think of more options: You can override the __newindex to only accept keys between 1 and n. If setlength(new_n) is called, all elements after new_n become nil, if new_n < n. But these would just be extra features to make life easier.

It has been said, such solutions are already possible. So maybe the only thing left to do is to define the "standard" solution.