我喜欢lua的循环,它鼓励像pairs
/ ipairs
这样的无状态迭代器,但我不知道如何在使用它们时从1以外的索引开始。
答案 0 :(得分:3)
虽然迭代器是无状态的,意味着它们没有保持任何状态,但仍然存在循环状态。有关通用循环的详细信息,请参见手册。您可以在自定义迭代器中设置自己的初始值:
local function iter(table, idx)
idx = idx + 1
local v = table[idx]
if v then
return idx, v
end
end
local function start_at(table, idx)
return iter, table, idx-1
end
local values = {33,42,77,91}
for k,v in start_at(values, 3) do
print(k,v)
end
假设ipairs
实现永远不会改变,你可以这样破解:
local values = {33,42,77,91}
for k,v in ipairs(values), values, 3-1 do
print(k,v)
end
最后一个示例将使用由ipairs
返回的默认迭代器,同时将其他值置于循环状态,用更改的初始值替换它。不要在你的代码中实际使用,但它说明了一个想法。