我是Lua的新手,并试图弄清楚下面的代码片段中如何使用下面squares函数中的return语句:
function squares(iteratorMaxCount)
return square,iteratorMaxCount,0
end
return语句中的square参数引用具有以下签名的函数:
function square(iteratorMaxCount,currentNumber)
让我感到困惑的是,像[
应该写为返回正方形(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
squares
确实返回三个值,第一个是函数。 squares
根本不调用square
。这里的技巧是for
... in
语法的工作方式。在Lua 5.3参考手册中,第3.3.5节说:
Afor语句,如:
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
”后面必须跟三个值:用于在每次迭代中获取变量的“迭代器函数”
- 每次传递给函数的“状态”值
- 第一次传递给函数的初始值
nil
时,for
循环结束。因此,在此示例中,squares(max)
设计为在“ in
”之后使用,使用square
作为迭代器函数,max
作为“状态”,0
作为初始值,并且数字及其平方作为循环数据值。