导读 | 很多情况下,迭代器需要保存多个状态信息而不是简单的状态常量和控制变量,最简单的方法是使用闭包,还有一种方法就是将所有的状态信息封装到 table 内,将 table 作为迭代器的状态常量,因为这种情况下可以将所有的信息存放在 table 内,所以迭代函数通常不需要第二个参数。 |
案例
有状态迭代器
有状态迭代器的使用
#!/usr/bin/lua print("haicoder(www.haicoder.net)\n") array = {"Hello", "HaiCoder", "Lua"} function elementIterator (collection) local index = 0 local count = #collection -- 闭包函数 return function () index = index + 1 if index <= count then -- 返回迭代器的当前元素 return collection[index] end end end for element in elementIterator(array) do print(string.format("Element = %s", element)) end
程序运行,控制台输出,如下图:
上面的例子中我们可以看到,在 elementIterator 函数内定义了另外一个匿名函数。此匿名函数中使用了一个外部变量 index (译注:此变量在匿名函数之外,elementIterator 函数内)。每次内部的匿名函数被调用时,都会将 index 的值增加 1,并统计数返回的每个元素。
我们可以参照上面的方法使用闭包创建一个迭代器函数。每次我们使用迭代器遍历集合时,它都可以返回多个元素。
Lua有状态迭代器总结
很多情况下,迭代器需要保存多个状态信息而不是简单的状态常量和控制变量,最简单的方法是使用闭包,还有一种方法就是将所有的状态信息封装到 table 内,将 table 作为迭代器的状态常量,因为这种情况下可以将所有的信息存放在 table 内,所以迭代函数通常不需要第二个参数。
原文来自:
本文地址://q13zd.cn/lua-state-iterator.html编辑:薛鹏旭,审核员:逄增宝
Linux大全:
Linux系统大全: