我想知道是否可以在多参数组函数上使用currying:
scala> def sum(a: Int)(b: Int): Int = { a+b }
sum: (a: Int)(b: Int)Int
scala> sum(3)(4)
res2: Int = 7
scala> val partFunc = sum(3) _
partFunc: Int => Int = <function1>
scala> partFunc(4)
res3: Int = 7
scala> val partFunc2 = sum _ _
<console>:1: error: ';' expected but '_' found.
val partFunc2 = sum _ _
^
scala> val partFunc2 = (sum _) _
<console>:8: error: _ must follow method; cannot follow Int => (Int => Int)
val partFunc2 = (sum _) _
答案 0 :(得分:2)
简单地写sum _
与sum
的参数没有任何关系,只是将函数对象 sum
与区分开来应用程序的功能。
因此,你可以写:
scala> val partFunc2 = sum _
partFunc2: Int => (Int => Int) = <function1>
从类型信息中可以看出,这已经是sum
的咖喱版本,需要两个Int
个参数。
当然,您可以像partFunc2(4)
类型Int => Int
一样继续前进,等等。
答案 1 :(得分:1)
你可以这样做:
val partFunc2 = sum _
或者像这样:
val partFunc2 = sum(3) _