Lua:“pairs”不会迭代 [1]。

我很快就要解决一些问题,并编写以下功能:

function dumpTable(t)
    for i,v in pairs(t) do
        if type(v) == "table" then
            dumpTable(v)
        else
            print(i..":", v)
        end
    end
end

现在,由于某种原因

dumpTable({[1]="hello??", [2]="two", {[132]="something", [3.2]="else"}})

输出

132:    something
3.2:    else
2:  two

请注意第一个字符串缺失的情况?但是如果我更改其键..

dumpTable({["one"]="hello??", [2]="two", {[132]="something", [3.2]="else"}})

它输出

132:    something
3.2:    else
one:    hello??
2:  two

这是如此不直观,我几乎感到像个傻瓜,没有发现错误。

(顺便说一句,我知道我的函数将在表包含递归引用时溢出堆栈,稍后会修复)

原文链接 https://stackoverflow.com/questions/7667676

点赞
stackoverflow用户734069
stackoverflow用户734069

问题在于内部表格。您没有给它一个键,这意味着 Lua 将为它分配一个数组索引。也就是说,1。这将覆盖您为"hello??" 使用的 [1] 键。因此,您需要为该表格的值赋予适当的键,或者停止使用整数键用于其他内容。

或者,换句话说,以下两个表格相同:

``` {"first", "second", "third"}

{[3] = "third", [2] = "second", "first"} // 注意缺少 "first" 的键。

2011-10-05 21:07:11