- 无状态迭代器
--无状态的迭代器是指不保留任何状态的迭代器,因此在循环中我们可以利用无状态迭代器避免创建闭包花费额外的代价 function test(max,index) if(index<max) then index = index +1 return index,index+index end end for i,n in test,5,0 do -- 循环开始时,5传给函数test的max, 0传给函数test的index. test的两个返回值分别赋值给i和n print(i,n) -- 接下来每次循环都会将i作为参数传张函数test的index. max=5保持不变 end function test2(max,index) if(index < max) then index = index +1 return index,index+index,index*index end end for i,n,m in test2,5,0,1 do --i,n,m 分别接收函数test2的三个返回值 print(i,n,m) end
- 多状态迭代器
--很多情况下,迭代器需要保存多个状态信息而不是简单的状态常量和控制变量, --最简单的方法是使用闭包,还有一种方法就是将所有的状态信息封装到table内, --将table作为迭代器的状态常量,因为这种情况下可以将所有的信息存放在table内, --所以迭代函数通常不需要第二个参数。 arr = {"hello","world","lua","java"} function test(arr) local index = 0 local count = #arr --闭包函数 return function() index = index +1 if(index <= count) then return arr[index] end end end for a in test(arr) do print(a) end for i,n in pairs(arr) do -- pairs其实就是类似与test这样的函数,只不过返回两个参数 print(i,n) end
lua中 迭代器
最新推荐文章于 2023-01-29 21:20:42 发布