【发布时间】:2020-10-12 15:17:12
【问题描述】:
我一直在学习 Lua 中的柯里化,遇到了以下代码:
function addup(x)
local sum = 0
local function f(n)
if type(n) == "number" then
sum = sum + n
return f
else
return sum
end
end
return f(x)
end
print(addup (1) (2) (3) ()) --> 6
print(addup (4) (5) (6) ()) --> 15
我假设(1) (2) (3) () 部分意味着这些值是连续而不是同时传递给函数的。我的问题是我不太清楚这些值是如何准确传递的,以及函数如何操作它们。所以第一个值是 x,但第二个会发生什么?它是否作为 n 传递给内部函数?那么第三个去哪了?
我的另一个问题是这条线:
return f
这里的函数返回自身,没有任何值,甚至没有括号。我知道您可以将字符串或表格传递给省略括号的函数,但这里不是这种情况。那到底是怎么回事?
我查看了手册,但没有找到关于这些功能的任何内容。我非常感谢详细介绍此内容的解释或手册链接。谢谢。
更新: 链接到我提到的教程 - http://lua-users.org/wiki/CurriedLua
正如其中一位回答者所指出的,lua 中没有 (x)(y) 语法。它是什么,是一系列函数调用。这实际上并没有在教程中提到,但我的假设被证明是错误的,所以我编辑了这一点。
问题已解决。感谢您的所有回答,他们非常有帮助。
【问题讨论】:
-
请链接您参考的教程
-
那个例子实际上是错误的。你不能这样做,例如
add5=addup(5); print(add5 (3) ()); print(add5 (2) (),因为它会打印8和10而不是8和7。
标签: function syntax lua currying