Scala,Currying on multi parameter-group method?

时间:2012-06-04 12:05:43

标签: scala currying

我想知道是否可以在多参数组函数上使用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 _) _

2 个答案:

答案 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) _