我是 Lua 的新手,并试图弄清楚下面的squares函数中的return语句是如何在以下代码片段中使用的:
function squares(iteratorMaxCount)
return square,iteratorMaxCount,0
end
Run Code Online (Sandbox Code Playgroud)
return 语句中的square参数引用了具有以下签名的函数:
function square(iteratorMaxCount,currentNumber)
Run Code Online (Sandbox Code Playgroud)
让我困惑的是return语句看起来像是返回三个值。然而,我认为它实际上在做的是将iteratorMaxCount和0作为参数传递给square函数调用。
谁能向我解释这种语法发生了什么?这如何作为函数调用而不是返回三个值?在我看来,似乎 return 语句应该写成return square(iteratorMaxCount, 0)而不是return square, 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
Run Code Online (Sandbox Code Playgroud)
squares确实返回三个值,其中第一个是函数。squares根本不打电话square。
这里的诀窍是for...in语法是如何工作的。在 Lua 5.3 参考手册中,第 3.3.5 节说:
像这样的for语句:
Run Code Online (Sandbox Code Playgroud)for var_1, ···, var_n in explist do block end相当于代码:
Run Code Online (Sandbox Code Playgroud)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作为初始值,以及一个数字及其平方作为循环数据值。
| 归档时间: |
|
| 查看次数: |
183 次 |
| 最近记录: |