我试图理解迭代器,在很多例子中我发现了这样的东西:
function square(iteratorMaxCount,currentNumber)
if currentNumber<iteratorMaxCount
then
currentNumber = currentNumber+1
return currentNumber, currentNumber*currentNumber
end
end
function squares(iteratorMaxCount)
return square,iteratorMaxCount,0 // why not return square(iteratorMAxCount,0)????
end
for i,n in squares(3)
do
print(i,n)
end
首先,我不理解我评论的那一行,我没有找到一个如何做有状态迭代器和无状态迭代器的简单例子。有谁能够帮我?谢谢
一个for语句就像
for var_1, ···, var_n in explist do block end is equivalent to the code: do local f, s, var = explist while true do local var_1, ···, var_n = f(s, var) if var_1 == nil then break end var = var_1 block end end Note the following:
explist
仅评估一次。其结果是迭代器函数,状态和第一个迭代器变量的初始值。 f,s和var是不可见的变量。这些名称仅供参考。您可以使用break来退出for循环。循环变量var_i是循环的局部变量;你不能在结束后使用他们的价值观。如果需要这些值,则在断开或退出循环之前将它们分配给其他变量。
因此,square()必须返回一个函数(square)状态(iteratorMaxCount)和一个初始值(0),以便使用泛型for循环。
阅读参考手册,Lua编程。