4 ms·
Sure, technically you /can/ do it, but only in the same way that you can use negative indices in JavaScript arrays and objects. The 0-indexed element won't tie
by LewisJEllis 11y ago
Sure, technically you /can/ do it, but only in the same way that you can use negative indices in JavaScript arrays and objects. The 0-indexed element won't tie into length operators without additional manual bookkeeping with table.setn.
$ lua
Lua 5.2.4 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> x = {}
> x[0] = 1
> =#x
0
> =x[0]
1
> x[1] = 2
> =#x
1
>
$ node
> x = []
[]
> x[-1] = 0
0
> x[0] = 1
1
> x
[ 1, '-1': 0 ]
> x.length
1
That's reason enough IMO to just suck it up and use 1-based indexing, even before you add munificent's (stronger) point about standard libraries and the rest of the ecosystem.
I agree that 1-based indexing isn't as much of a downside as people make it out to be, but saying you can ignore it and index from 0 "no worries" is just being silly.
- qwertyuiop924 11y agoIn lua, iterating over arrays/tables with things like ipairs() is the idiom, so it's not so bad, but if you want to do anything involving mod, you have to add an extra plus 1. this is where bugs happen.
- LewisJEllis 11y agoYes, ipairs is idiomatic, but that doesn't matter here because ipairs doesn't return the 0 index. > x = {} > x[0] = 2 > x[1] = 3 > for i, v in ipairs(x) do print(i, v) end 1 3 > x[2] = 4 > for i, v in ipairs(x) do print(i, v) end 1 3 2 4
- qwertyuiop924 11y agoNo, what I mean is that it's not idiomatic to access lua "arrays" by index.
- fit2rule 11y agoThe only requirement is the Lua developer knowing how to use a Lua table for anything they need.