複数のパラメーター リスト (例: リストdef foo(a:Int)(b:Int) = {}
ごとの複数のパラメーター) はdef foo(a:Int, b:Int) = {}
、私が知る限り、意味的に同等であり、ほとんどの関数型言語には、複数のパラメーター (F# など) を宣言する方法が 1 つしかありません。
これら両方のスタイルの関数定義をサポートする唯一の理由は、パラメーターを 1 つしか持たないパラメーター リストを使用して、構文に似た言語拡張を許可するためです。
def withBufferedWriter(file: File)(block: BufferedWriter => Unit)
構文のように呼び出すことができるようになりました
withBufferedWriter(new File("myfile.txt")) { out =>
out write "whatever"
...
}
ただし、複数のパラメーター リストを使用せずに中括弧の使用をサポートする方法は他にもあります。
関連する質問: Scala で複数のパラメーター リストを使用することを「カリー化」と呼ぶのはなぜですか? カリー化は通常、部分適用をサポートするために n 項関数を単項にする手法として定義されます。ただし、Scala では、関数の「カリー化された」(それぞれ 1 つのパラメーターを持つ複数のパラメーター リスト) バージョンを作成せずに、関数を部分的に適用できます。