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

问题描述 投票:1回答:1

我是Lua的新手,并试图弄清楚下面的代码片段中如何使用下面squares函数中的return语句:

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

return语句中的square参数引用具有以下签名的函数:

function square(iteratorMaxCount,currentNumber)

让我感到困惑的是,像[语句looks一样,它返回了三个值。但是,我think的实际操作是将iteratorMaxCount0作为参数传递给square函数调用。

有人可以向我解释这种语法的含义吗?与返回三个值相反,它如何用作函数调用?在我看来,感觉返回语句

应该写为返回正方形(iteratorMaxCount,0)

,而不是返回正方形iteratorMaxCount,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

lua return
1个回答
0
投票
squares确实返回三个值,第一个是函数。 squares根本不调用square

这里的技巧是for ... in语法的工作方式。在Lua 5.3参考手册中,第3.3.5节说:

A

for语句,如:

for var_1, ···, var_n in explist do block end
等效于代码:

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”后面必须跟三个值:

    用于在每次迭代中获取变量的“迭代器函数”
  1. 每次传递给函数的“状态”值
  2. 第一次传递给函数的初始值
  • 第一次调用该函数后,前一个调用的第一个值将传递回下一个函数调用。从函数返回的第一个值是nil时,for循环结束。

    因此,在此示例中,squares(max)设计为在“ in”之后使用,使用square作为迭代器函数,max作为“状态”,0作为初始值,并且数字及其平方作为循环数据值。

  • © www.soinside.com 2019 - 2024. All rights reserved.