lua迭代器

通用形式的 for 通过一个叫作迭代器 的函数工作
每次迭代,迭代器函数都会被调用以产生一个新的值,当这个值为 nil 时,循环停止.通用形式的 for 循环的语法如下:

stat ::= for namelist in explist do block end
namelist ::= Name {',' Name}

explist 只会被计算一次,它返回三个值,一个 迭代器 函数, 一个 状态,一个 迭代器的初始值

test.lua
function square(iteratorMaxCount,currentNumber)
   if currentNumber<iteratorMaxCount
   then
      currentNumber = currentNumber+1
   return currentNumber, currentNumber*currentNumber
   end
end

for i,n in square,3,0
do
   print(i,n)
end

E:\lua>lua53 test.lua
1       1
---------
1       1
2       4
3       9

 

test.lua
function square(iteratorMaxCount,currentNumber)
   if currentNumber<iteratorMaxCount
   then
      currentNumber = currentNumber+1
   return currentNumber, currentNumber*currentNumber
   end
end

function squares(iteratorMaxCount)
   return square,iteratorMaxCount,0
end  

for i,n in squares(3)
do 
    print(i,n)
end

E:\lua>lua53 test.lua
1       1
2       4
3       9

 

posted @ 2017-04-24 16:09  H&K  阅读(196)  评论(0编辑  收藏  举报