八、迭代器与泛型for
迭代器是一种可以遍历一种集合中所有元素的机制。在Lua中,迭代器用函数表示,每调用一次函数即返回集合中的“下一个”元素。
1、迭代器与closure
每个迭代器都需要在每次成功调用之间保持一些状态,这样才能知道它所在位置及如何到下一个位置。closure为此提供了支持。因此迭代器遍历集合需要一个closure和创建该closure的工厂函数。
例如一个用于遍历数组的工厂函数(返回一个迭代器函数):
function values(t) --t is a table
local i=0
return function () i=i+1;return t[i] end
end
values()是一个工厂,返回的函数用于遍历一个table。每当调用values函数就创建一个新的closure(包括迭代函数和相关的非局部的变量)。
使用values有以下方法:
①while
t={10,20,30}
it=values(t) -- 创建迭代器
while true do
local element=it() --调用迭代器获得集合的值
if element == nil then break
else print(element)
end
end
②泛型for
for element invalues(t) do
print(element)
end
泛型for在内部保存了迭代函数,因此不需要显式地指定一个values返回值&#