2

我想知道是否可以在多参数组函数上使用柯里化:

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 _) _
4

2 回答 2

2

写作sum _与 的参数没有任何关系sum,只是将函数对象 sum与函数的应用区分开来。

因此,您可以编写:

scala> val partFunc2 = sum _
partFunc2: Int => (Int => Int) = <function1>

从类型信息可以看出,这已经是sum带两个Int参数的柯里化版本了。

当然,您可以像以前一样继续使用partFunc2(4)类型Int => Int等。

于 2012-06-04T12:19:11.240 回答
1

你可以这样做:

val partFunc2 = sum _

或像这样:

val partFunc2 = sum(3) _
于 2012-06-04T12:13:49.983 回答