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