【发布时间】:2025-12-15 09:40:01
【问题描述】:
我可以定义以下两个函数:
def add(a: Int, b: Int, c: Int) = a + b + c
这导致
add: (a: Int, b: Int, c: Int)Int
和
val add2 = (a: Int, b: Int, c: Int) => a + b + c
这会导致
add2: (Int, Int, Int) => Int = <function3>
这两个都是做同样事情但以不同方式定义的函数,我不明白的是,如果我继续定义一个部分应用的函数,如下所示:
def a = add _
这会导致
a: (Int, Int, Int) => Int = <function3>
正如预期的那样,一个接受 3 个参数并返回一个 Int 的函数,但如果我这样做了
def a2 = add2 _
这会导致
a2: () => (Int, Int, Int) => Int = <function0>
这似乎是一个不带参数的函数,并返回一个带3个Int参数并返回一个Int的函数。为什么会这样?有人可以解释一下发生了什么吗?
谢谢
【问题讨论】:
-
该副本是第三个相关链接。真的,请尝试寻找以前提出的问题——这个问题已经被问过很多次了。虽然我认为该链接是最接近的副本,但我个人建议我的 this answer 深入了解主题。
-
哦,顺便说一句,如果你写
def add2而不是val add2,也许你会更清楚。 -
刚刚从一个已删除的答案中注意到您最初写的是
def而不是val。嗯,def和val的区别在于,前者每次调用时计算值,而后者计算一次,调用时返回预先计算的值。
标签: scala