Lua - 可变参数迭代器

我一直在尝试理解 Lua 的迭代器是如何工作和表现的。虽然闭包对我来说很清晰,但我一直在尝试使用无状态迭代器。像重新实现 ipairs 或 pairs 这样的简单任务对我来说非常清晰。但是如果我想编写一个迭代器,它接受可变数量的表并遍历它们怎么办?例如:

for i in iter({1,2,3}, {'a', 'b', 'c'}, {100, 101}, {}) do
    print(i)
end
-- 我期望它将输出:1, 2, 3, a, b, c, 100, 101

我一直在尝试在互联网上找到一些有用的信息,但我看到的都是同样的简单示例一次又一次地被重复使用。因此,欢迎任何提示和建议!

点赞
用户5321363
用户5321363

我认为你所说的迭代器应该像这样:

EDIT:用一个包含两个索引的数组替换了使用两个索引的方法。

function iter_variable (a, indexArr)
  indexArr[2] = indexArr[2] + 1
  local v = a[indexArr[1]][indexArr[2]]
  if v then
    return indexArr, v
  else
    -- 当前内部数据结构结束,移动到下一个内部数据结构
    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
2018-03-28 01:13:22