2

Scalaで関数を部分的に適用しました-

def sum(a:Int,b:Int,c:Int) = a+b+c

val partial1 = sum(1,_:Int,8)

部分的に適用された機能を使用することの利点は何であるか疑問に思いました。それとも単に構文上の追加ですか?

4

3 に答える 3

5

一般的な部分適用関数について、書籍「Programming in Scala, 2nd edition」には次のように記載されています。

アンダースコアを使用してパラメーター リスト全体を表すこの種の式について考える別の方法は、def を関数値に変換する方法です
たとえば、 などのローカル関数があるsum(a: Int, b: Int, c: Int): Int場合、apply メソッドが同じパラメーター リストと結果の型を持つ関数値でそれを「ラップ」できます。

scala> def sum(a: Int, b: Int, c: Int) = a + b + c
sum: (a: Int,b: Int,c: Int)Int
scala> val a = sum _
a: (Int, Int, Int) => Int = <function3>

(ここでa(1, 2, 3)は、次の短縮形を示します。

scala> a.apply(1, 2, 3)
res12: Int = 6

)

メソッドまたはネストされた関数を変数に代入したり、引数として別の関数に渡したりすることはできませんが、メソッドまたはネストされた関数を名前の後にアンダースコアを付けて関数値でラップすると、これらのことが可能になります。

于 2010-12-25T19:23:47.427 に答える
2

利点は、sum(1,_,8)よりも入力と読み取りが少ないことですx => sum(1,x,8)

それだけです。

于 2010-12-25T18:15:24.910 に答える
1

sum(1,_,8) は x => sum(1,x,8) よりも入力と読み取りが少ない

ただし、どちらも合法ではありません。パラメータ タイプを指定する必要があります。

于 2010-12-27T10:08:38.530 に答える