我们在Scala-
中部分应用了函数def sum(a:Int,b:Int,c:Int) = a+b+c
val partial1 = sum(1,_:Int,8)
我想知道使用部分应用功能有什么好处。或者它只是一个语法上的添加?
答案 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)
然而,两者都不合法;您必须提供参数类型。