在scala中使用部分应用函数有哪些应用/优点?

时间:2010-12-25 18:00:48

标签: scala partial-application

我们在Scala-

中部分应用了函数
def sum(a:Int,b:Int,c:Int) = a+b+c

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

我想知道使用部分应用功能有什么好处。或者它只是一个语法上的添加?

3 个答案:

答案 0 :(得分:5)

关于部分应用的功能,一般来说,书籍“Programming in Scala, 2nd edition”提及:

  

另一种思考这种表达的方式,其中有一个下划线   用于表示整个参数列表,是一种转换方式   定义为函数值
  例如,如果您有一个本地函数,例如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

  

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

答案 1 :(得分:2)

优点是sum(1,_,8)的输入和阅读量低于x => sum(1,x,8)

这就是它的全部内容。

答案 2 :(得分:1)

  

sum(1,_,8)的输入和读取要少于x =&gt;总和(1,X,8)

然而,两者都不合法;您必须提供参数类型。