Lua: 'pairs' doesn't iterate over [1]
I quickly had to debug something, and wrote following function:
function dumpTable(t)
for i,v in pairs(t) do
if type(v) == "table" then
dumpTable(v)
else
print(i..":", v)
end
end
end
Now, for some reason
dumpTable({[1]="hello??", [2]="two", {[132]="something", [3.2]="else"}})
outputs
132: something
3.2: else
2: two
notice how the first string is missing? But if I change its key..
dumpTable({["one"]="hello??", [2]="two", {[132]="something", [3.2]="else"}})
it outputs
132: something
3.2: else
one: hello??
2: two
This is so unintuitive I almost feel like making an idiot of myself not seeing the mistake..
(btw. I do know that my function开发者_如何学JAVA will overflow the stack if the table contains a recursive reference, going to fix that later)
The problem is the inner table. You didn't give it a key, which mean that Lua will give it an array index. Namely, 1
. Which will overwrite the [1]
key you used for "hello??"
. So you need to give this table value a proper key, or you need to stop using integer keys for the others.
Or, to put it another way, the following two tables are identical:
{"first", "second", "third"}
{[3] = "third", [2] = "second", "first"} --Note the lack of a key for "first".
精彩评论