共计 753 个字符,预计需要花费 2 分钟才能阅读完成。
导读 | 很多情况下,迭代器需要保存多个状态信息而不是简单的状态常量和控制变量,最简单的方法是使用闭包,还有一种方法就是将所有的状态信息封装到 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 | |
程序运行,控制台输出,如下图: | |
上面的例子中我们可以看到,在 elementIterator 函数内定义了另外一个匿名函数。此匿名函数中使用了一个外部变量 index (译注:此变量在匿名函数之外,elementIterator 函数内)。每次内部的匿名函数被调用时,都会将 index 的值增加 1,并统计数返回的每个元素。 | |
我们可以参照上面的方法使用闭包创建一个迭代器函数。每次我们使用迭代器遍历集合时,它都可以返回多个元素。 | |
Lua 有状态迭代器总结 | |
很多情况下,迭代器需要保存多个状态信息而不是简单的状态常量和控制变量,最简单的方法是使用闭包,还有一种方法就是将所有的状态信息封装到 table 内,将 table 作为迭代器的状态常量,因为这种情况下可以将所有的信息存放在 table 内,所以迭代函数通常不需要第二个参数。 | |
阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配 | |
腾讯云新客低至 82 元 / 年,老客户 99 元 / 年 | |
代金券:在阿里云专用满减优惠券 |
正文完
星哥玩云-微信公众号
