我正在尝试初始化并打印表格。它只是不工作。知道这个代码有什么问题吗?
--!/usr/bin/env lua
local retv = {}
retv["test"] = 1000
for k,v in ipairs(retv) do
print (k,v)
end
它什么都不打印。我确信我遗漏了一些非常基本的东西,但我无法弄清楚这一点。
答案 0 :(得分:5)
Lua中有两种形式的for
- 循环:
数字和通用for循环。
ipairs(t)
是一个迭代器构造函数,最多返回三个适用于泛型的参数,允许您按顺序迭代初始序列(索引1,2,3,...)。
可能的实施:
function ipairs(t)
local i = 0
return function()
i = i + 1
if t[i] ~= nil then
return i, t[i]
end
end
end
local function ipairs_helper(t, i)
i = i + 1
if t[i] ~= nil then
return i, t[i]
end
end
function ipairs(t)
return ipairs_helper, t, 0
end
正如您所看到的那样,永远不会使用密钥"test"
返回您的条目。
您想要的是pairs(t)
,相当于next, t
这将迭代所有元素。
答案 1 :(得分:4)
您需要使用pairs
代替ipairs
。 pairs
遍历所有密钥,ipairs
仅迭代keys that form a sequence of integers starting from 1 without gaps。 (这些密钥是存储在数组中还是表的散列部分是实现细节,并且可能在表的生命周期内发生变化。)
例如,ipairs({'a', 'b', nil, 'c'})
遍历键1和2,停在(并且不包括)3,因为表中缺少该键。