Step By Step(Lua迭代器和泛型for)
1. 迭代器与Closure: 1 function values(t) 2 local i = 0 3 return function() 4 i = i + 1 5 return t[i] 6 end 7 8 t = {10,20,128)">30} 9 it = values(t) 10 while true do 11 local element = it() 12 if element == nil then 13 break 14 15 print(element) 16 17 --另外一种基于foreach的调用方式(泛型for) 18 t2 = {15,128)">25,128)">35} 19 for element in values(t2) 20 21 22 输出结果为:23 1024 2025 3026 1527 2528 35 ??? 从上面的应用示例来看,相比于while方式,泛型for的方式提供了更清晰的实现逻辑。因为Lua在其内部替我们保存了迭代器函数,并在每次迭代时调用该隐式的内部迭代器,直到迭代器返回nil时结束循环。 1 function ipairs2(a) 2 return iter,a,128)">3 end ??? 该函数返回3个值,第一个为实际的迭代器函数变量,第二个是一个恒定对象,这里我们可以理解为待遍历的容器,第三个变量是在调用iter()函数时为其传入的初始值。 local function iter(a,i)
2 i = i + 3 local v = a[i]
4 if v 5 return i,v
6 else
7 nil,nil
8 9 end
|