"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
.
我只是 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
.