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

可怜的男孩

我一直在尝试了解Lua迭代器的工作方式和行为。虽然闭包对我来说很清楚,但在使用无状态迭代器时一直遇到困难。

对我来说,最简单的任务(例如重新实现一对或一对)很清楚。但是,如果我想编写一个迭代器,该迭代器接收可变数量的表并对其进行迭代,该怎么办?例如,

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

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

兰恩·利夫希茨(Rann Lifshitz)

我认为您正在讨论的迭代器应如下所示:编辑:用包含两个索引的单个数组替换了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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档