版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/HQ354974212/article/details/89380343
lua中的迭代器通常使用函数来实现,当我们调用一次迭代器函数的时候,返回集合中的下一个元素,到这里,我们知道,那这个迭代器函数必须保存上一次调用时的一些状态,以便下一次调用,lua中的closure正好符合要求,我们可以把上一次调用的信息保存在closure中,然后就是我们需要一个返回这个迭代器的函数,我们可以把这个函数叫着生成迭代器的工厂函数。
看概念头疼,直接撸代码
--迭代器共厂函数
function iterCreater(a)
local i= 1
--返回一个closure用来保存 i 的值
return function()
e =a[i]
i=i+1
return e
end
end
t={ 1,2,3,4,5 }
iter = iterCreater(t)
while true do
local v = iter() --循环调用
if v then
print(v)
else
break
end
end
我们可以利用泛型for来简化, for做的第一件事就是对in后面的表达式求值,这些表达式应该返回3个值供for保存: 迭代器函数、恒定状态和控制变量的初值。 iterCreater(t)返回了迭代器函数、(还缺两个返回,使用nil、nil) , v的值由迭代器函数(此处是无参数的)返回
--迭代器共厂函数
function iterCreater(a)
local i= 1
--返回一个closure用来保存 i 的值
return function()
e =a[i]
i=i+1
return e
end
end
t={ 1,2,3,4,5 }
for v in iterCreater(t) do
print(v)
end