"number" 的值在 LUA 迭代器中是如何改变的?

how the value of "number" was changed in a LUA iterator?

我只是 LUA 的初学者。我不明白为什么在这个主体中更改了对象“数字”的值。如果您能回答我,请提前致谢。

function square(iteratorMaxCount, number)--how the value of "number" was changed?
    currentNumber = number + 1
    if currentNumber<=iteratorMaxCount
    then
        return currentNumber, currentNumber*currentNumber, number
    end
end


for i,n ,k in square,3,-1
do
    print(i,n,k)
end

这是解决方案:

lua.exe iterator.lua
0   0   -1
1   1   0
2   4   1
3   9   2

在 for 循环中初始调用 square 之后,number 设置为从上次调用返回的 currentNumber 的值。

这是一个“无状态”迭代器,Programming in Lua: 7.3 – Stateless Iterators涵盖了这个主题。

讨论了 for 循环的语义 Programming in Lua: 7.2 – The Semantics of the Generic for

根据这些部分的信息我们可以知道,for 循环的工作原理与 7.2 中描述的一样

    do
      local _f, _s, _var = explist
      while true do
        local var_1, ... , var_n = _f(_s, _var)
        _var = var_1
        if _var == nil then break end
        block
      end
    end

我们的函数 square 将是引用为 _f 的函数。在每个循环之后,我们将 square 返回的第一个值作为第二个参数传递回它,如上所示 _var.