lua-users home
lua-l archive

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

The 5.1alpha version of unpack allows you to specify start and end indices, which is useful.

There is an undocumented feature where:
  unpack(tab, start, -1)
is the same as
  unpack(tab, start, #tab)

Any other negative index is treated as a negative index. Unfortunately, this creates an inconsistency; if the table actually has negative indices (say, the arg table in the standalone interpreter), then:
  unpack(arg, -3, -2) -- works as expected
  unpack(arg, -3, -1) -- does not work as expected
(As always, depending on one's expectations)

In any event, unpack(tab, start, -fin) is not equivalent to unpack(tab, start, #tab+1-fin), as one might expect by analogy with string.sub, unless -fin is exactly -1.

I think its behaviour ought to be consistent. Either negative indices are always valid and treated literally as negative indices, or both negative start and negative fin are treated as relative to #tab (which would make it useless for arrays which actually had negative indices).