Lua: 'pairs' 不会迭代 [1]

标签 lua iterator lua-table

我很快不得不调试一些东西,并编写了以下函数:

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

注意第一个字符串是如何丢失的?但是如果我改变它的 key ..
dumpTable({["one"]="hello??", [2]="two", {[132]="something", [3.2]="else"}})

它输出
132:    something
3.2:    else
one:    hello??
2:  two

这太不直观了,我几乎觉得自己是个白痴,没有看到错误。

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

最佳答案

问题是内表。你没有给它一个键,这意味着 Lua 会给它一个数组索引。即, 1 .这将覆盖 [1]您用于 "hello??" 的 key .所以你需要给这个表值一个合适的键,或者你需要停止为其他人使用整数键。

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

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

{[3] = "third", [2] = "second", "first"} --Note the lack of a key for "first".

关于Lua: 'pairs' 不会迭代 [1],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7667676/

相关文章:

audio - Gmod-Lua错误- 'Attempting to index field ' GM'(零值)

c++ - 在模板类中使用标准容器迭代器

properties - 如何使用Lua解析Property文件

lua - 如何按值复制 Lua 表?

http - 如何以简单、无痛的方式提供 lua 页面/脚本?

lua - REDIS:自动设置新增key的过期时间

c++ - 在同一对象内插入 vector

c++ - 迭代时从 vector 和内存中删除一个对象

variables - 计算表中未知变量的数量

string - 高效分割字符串