很多情况下,迭代器需要保存多个状态信息而不是简单的状态常量和控制变量,最简单的方法是使用闭包,还有一种方法就是将所有的状态信息封装到 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 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 内,所以迭代函数通常不需要第二个参数。
以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !