Lua - 具有可变数量参数的迭代器

时间:2018-03-28 00:54:42

标签: lua iterator iteration

我一直在努力了解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

我一直试图在互联网上找到一些有用的信息,但我所看到的只是一遍又一遍地使用的简单例子。所以,欢迎任何提示和建议!

1 个答案:

答案 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