2

我们在 Scala 中部分应用了函数-

def sum(a:Int,b:Int,c:Int) = a+b+c

val partial1 = sum(1,_:Int,8)

我想知道使用部分应用函数有什么好处。或者它只是一个句法添加?

4

3 回答 3

5

关于一般的部分应用函数,“ Programming in Scala, 2nd edition ”一书提到:

考虑这种表达式(其中下划线用于表示整个参数列表)的另一种方法是将 def 转换为函数值的方法
例如,如果您有一个本地函数,例如sum(a: Int, b: Int, c: Int): Int,您可以将其“包装”在一个函数值中,该函数值的 apply 方法具有相同的参数列表和结果类型。

scala> def sum(a: Int, b: Int, c: Int) = a + b + c
sum: (a: Int,b: Int,c: Int)Int
scala> val a = sum _
a: (Int, Int, Int) => Int = <function3>

(这里,a(1, 2, 3)是一个简短的形式:

scala> a.apply(1, 2, 3)
res12: Int = 6

)

虽然您不能将方法或嵌套函数分配给变量,或将其作为参数传递给另一个函数,但如果您通过在其名称后放置下划线将方法或嵌套函数包装在函数值中,则可以执行这些操作。

于 2010-12-25T19:23:47.427 回答
2

优点是sum(1,_,8)打字和阅读比x => sum(1,x,8).

这里的所有都是它的。

于 2010-12-25T18:15:24.910 回答
1

sum(1,_,8) 比 x => sum(1,x,8) 更容易输入和读取

但是,两者都不合法。您必须提供参数类型。

于 2010-12-27T10:08:38.530 回答