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