我一直在努力了解Lua迭代器的工作原理和行为方式。虽然闭包很清楚,但我在使用无状态迭代器时遇到了困难。
最简单的任务,比如重新实现ipairs或pair,对我来说相当清楚。但是如果我想编写一个迭代器,它会接收可变数量的表并迭代它们呢? 例如,
for i in iter({1,2,3}, {'a', 'b', 'c'}, {100, 101}, {}) do
print(i)
end
--I would expect it to write: 1, 2, 3, a, b, c, 100, 101
我一直试图在互联网上找到一些有用的信息,但我所看到的只是一遍又一遍地使用的简单例子。所以,欢迎任何提示和建议!
答案 0 :(得分:1)
我认为你所谈论的迭代器应该是这样的: 编辑:使用包含两个索引的单个数组替换2个索引的使用。
function iter_variable (a, indexArr)
indexArr[2] = indexArr[2] + 1
local v = a[indexArr[1]][indexArr[2]]
if v then
return indexArr, v
else
-- end of current internal DS, move on to the next internal DS
indexArr[1] = indexArr[1] + 1
indexArr[2] = 1
local v = a[indexArr[1]][indexArr[2]]
if v then
return indexArr, v
end
end
end
function ipairs_variable (...)
local a = {...}
return iter_variable, a, {1,0}
end
for i, v in ipairs_variable({1,2,3}, {'a', 'b', 'c'}, {100, 101}, {}) do
print(v)
end