在此,我想了解之间的区别:
val aCurriedfunc: Int => String => String = x => y => x + " " + y
aCurriedfunc (2)
和
def aCurriedMethod (x:Int) (y: String) = x + " " + y
aCurriedMethod (2) _
确实为什么第一种情况不需要“_”,但第二种情况需要它。 是的,一个是一个类型的函数,另一个是Sscala中没有真正类型的方法。然而,这种区别只是引出了我的第二个问题。
如果是的话
答案 0 :(得分:3)
_
中的curriedMethod (2) _
要求编译器执行eta-expansion。结果是一个函数,之后无法(或需要)区分部分应用的函数和eta扩展的结果。
像curriedMethod
这样的方法中的单独参数列表实际上是作为单个方法实现的,并且所有参数都已组合在一起。无论如何都需要进行Eta扩展才能使方法成为函数,因此通过让eta-expansion创建的闭包关闭部分应用的参数来实现部分扩展。