我想知道是否可以在多参数组函数上使用柯里化(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 _) _
最佳答案
简单写sum _
与 sum
的论点没有任何关系, 而是简单区分函数对象sum
从函数的应用。
因此,您可以编写:
scala> val partFunc2 = sum _
partFunc2: Int => (Int => Int) = <function1>
从类型信息可以看出,这已经是
sum
的curried版本了这需要两个 Int
参数。当然,您可以像以前一样继续使用
partFunc2(4)
属于 Int => Int
类型等等。
关于Scala,Currying 多参数组方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10880982/