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>

型情報からわかるように、これは既に2 つのパラメーター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 に答える