Lua 试图理解自定义迭代器

Lua 试图理解自定义迭代器,lua,Lua,我试图理解迭代器,在许多示例中,我会得出如下结论: function square(iteratorMaxCount,currentNumber) if currentNumber<iteratorMaxCount then currentNumber = currentNumber+1 return currentNumber, currentNumber*currentNumber end end function squares(ite

我试图理解迭代器,在许多示例中,我会得出如下结论:

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
函数平方(迭代器计数,当前数)
如果currentNumber来自:

像这样的陈述

 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和var是不可见的变量。这些名字是用来解释的 只是目的而已。可以使用break退出for循环。环路 变量var_i是循环的局部变量;不能使用它们的值 比赛结束后。如果需要这些值,请将它们指定给 断开或退出循环之前的其他变量

所以squares()必须返回一个函数(square)、一个状态(iteratorMaxCount)和一个初始值(0),才能使用泛型for循环

阅读参考手册,Lua编程。

来自:

像这样的陈述

 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和var是不可见的变量。这些名字是用来解释的 只是目的而已。可以使用break退出for循环。环路 变量var_i是循环的局部变量;不能使用它们的值 比赛结束后。如果需要这些值,请将它们指定给 断开或退出循环之前的其他变量

所以squares()必须返回一个函数(square)、一个状态(iteratorMaxCount)和一个初始值(0),才能使用泛型for循环


阅读《Lua编程参考手册》。

你看过这个答案了吗?我还建议研究一下:Lua:7.1中的编程——迭代器和闭包——您看过这个答案了吗?我还建议研究:Lua:7.1中的编程——迭代器和闭包