gpt4 book ai didi

lua - Lua 中逗号分隔的 return 语句如何充当函数调用?

转载 作者:行者123 更新时间:2023-12-04 22:33:40 25 4
gpt4 key购买 nike

我是 Lua 的新手并试图弄清楚 返回 中的声明正方形下面的函数正在以下代码片段中使用:

function squares(iteratorMaxCount)
return square,iteratorMaxCount,0
end

方形 return 语句中的参数引用具有以下签名的函数:
function square(iteratorMaxCount,currentNumber)

让我困惑的是 返回 语句看起来像是返回三个值。然而,我认为它实际上正在做的是通过 iteratorMaxCount 0 作为 的参数方形函数调用。

谁能向我解释这种语法发生了什么?这如何作为函数调用而不是返回三个值?在我看来,返回语句应该写成 返回 square(iteratorMaxCount, 0) 而不是 返回平方,迭代器最大计数,0 .我知道这显然是错误的,但我不知道为什么。

我试过搜索 Lua 手册、Lua 引用指南和 Google 搜索,但似乎找不到任何解释这种特定语法的内容。任何人都可以指出我正确的方向吗?

提前致谢。

下面的完整代码通过
Tutorialspoint
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

最佳答案

squares确实返回三个值,其中第一个是函数。 squares不打电话square根本。

这里的诀窍是 for ... in语法有效。在 Lua 5.3 引用手册中,第 3.3.5 节说:

A for statement like:

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


所以关键字“ in”后面需要跟三个值:
  • 用于在每次迭代中获取变量的“迭代器函数”
  • 每次传递给函数的“状态”值
  • 第一次传递给函数的初始值

  • 在第一次调用该函数后,前一次调用的第一个值将传递回下一次函数调用。当函数返回的第一个值是 nil , for循环结束。

    所以在这个例子中, squares(max)设计为在“ in”之后使用,使用 square作为迭代器函数, max作为“状态”, 0作为初始值,一个数字及其平方作为循环数据值。

    关于lua - Lua 中逗号分隔的 return 语句如何充当函数调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58632757/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com