[解決済み] なぜScalaは複数のパラメータリストとリストごとの複数のパラメータの両方を提供するのですか?重複
2023-07-04 20:08:59
質問
複数のパラメータリスト、例えば
def foo(a:Int)(b:Int) = {}
というように、リストごとに複数のパラメータを指定することができます。
def foo(a:Int, b:Int) = {}
は私が知る限り意味的に同等であり、ほとんどの関数型言語では複数のパラメータを宣言する方法は1つしかありません(例:F#)。
これらのスタイルの関数定義の両方をサポートする唯一の理由は、1つのパラメータしかないパラメータリストを使用した構文のような言語拡張を可能にすることです。
def withBufferedWriter(file: File)(block: BufferedWriter => Unit)
という構文で呼び出せるようになりました。
withBufferedWriter(new File("myfile.txt")) { out =>
out write "whatever"
...
}
しかし、複数のパラメータリストを持たずに中括弧の使用をサポートする他の方法があり得ます。
関連する質問:なぜScalaでは複数のパラメータリストを使用することを"currying"と呼ぶのでしょうか?Currying は通常、部分的な適用をサポートするために n-ary の関数を unary にする技術として定義されます。しかし、Scalaでは、関数のquot;curried"(各1つのパラメータを持つ複数のパラメータリスト)バージョンを作成しなくても、関数を部分的に適用することができます。
どのように解決するのですか?
などができるようになります。
scala> def foo(as: Int*)(bs: Int*)(cs: Int*) = as.sum * bs.sum * cs.sum
foo: (as: Int*)(bs: Int*)(cs: Int*)Int
scala> foo(1, 2, 3)(4, 5, 6, 7, 9)(10, 11)
res7: Int = 3906
関連
-
[解決済み] ネストした構造体をよりきれいに更新する方法
-
[解決済み] Scalaです。リスト[Future]からFuture[List]への変換は、失敗したFutureを無視する。
-
[解決済み] HDFSではなく、ローカルファイルをsc.textFileで読み込む方法
-
[解決済み] SBTのrunアクションでアプリケーションを実行するために、JVMの最大ヒープサイズを"-Xmx "で指定する方法は?
-
[解決済み] Scala。文字列からブール値へのエレガントな変換
-
[解決済み] Scalaの::と::の違いは何ですか?
-
[解決済み] Scalaのメソッド宣言で等号を使用するのはいつですか?
-
[解決済み] ケースクラスのコンパニオンでapplyをオーバーライドする方法
-
[解決済み] Scalaの複数パラメータリストと複数パラメータ/リストの違いは何ですか?
-
[解決済み] ScalaでCurryする2つの方法、それぞれのユースケースは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Scalaでは、'val a. = _' (アンダースコア)は具体的にどのような意味ですか?A = _' (アンダースコア)とはどういう意味ですか?
-
[解決済み] scalaは推論される型の「許容される複雑さ」にどのような制限を設けているのでしょうか?
-
[解決済み] Any、AnyVal、AnyRef、Objectの関係と、Javaコードでのマッピングについて教えてください。
-
[解決済み] 末尾再帰関数が最適化されるためのScalaアノテーションは何ですか?
-
[解決済み] Scalaでリストを2つのフィールドでソートするには?
-
[解決済み] SBTの正しい使い方を教えてください。
-
[解決済み] 関数型プログラミング(特にScalaとScala API)におけるreduceとfoldLeft/foldの違いとは?
-
[解決済み] に似た三項演算子。
-
[解決済み] ケースクラスのコンパニオンでapplyをオーバーライドする方法
-
[解決済み] Scalaの複数パラメータリストと複数パラメータ/リストの違いは何ですか?