Scalaのapply()メソッドのマジックはどうなっているのか?
2023-08-24 20:20:51
質問
Scalaでは、もし私が
apply
というメソッドをクラスやトップレベルオブジェクトに定義すると、そのクラスのインスタンスに括弧のペアを追加したときにそのメソッドが呼び出されます。
apply()
の適切な引数をそれらの間に入れるたびに呼び出されます。例えば
class Foo(x: Int) {
def apply(y: Int) = {
x*x + y*y
}
}
val f = new Foo(3)
f(4) // returns 25
ですから、基本的には
object(args)
は単に
object.apply(args)
.
Scalaはこの変換をどのように行っているのでしょうか?
Predefオブジェクトの暗黙の型変換に似た、グローバルに定義された暗黙の変換がここで行われているのでしょうか(しかし種類は違います)?それとも何か深い魔法があるのでしょうか?Scala は、多くの例外を伴う多くのルールよりも、より小さなルールのセットを一貫して適用することを強く支持しているように思えるので、私はこの質問をしました。これは最初、私には例外のように思えます。
どのように解決するのですか?
あなたが最初に言ったことより深いことはないと思います。これは単なる構文上の糖分で、コンパイラが
f(a)
を
f.apply(a)
を特殊な構文ケースとして使用します。
これは特殊なルールのように思えるかもしれませんが、ごく一部(例えば
update
) では
DSL
-のような構成とライブラリが可能です。
関連
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み] Scalaのforループは下降か減少か?
-
[解決済み] sbtとGradleの比較 [終了しました]。
-
[解決済み] Scalaでmapを使用してインデックスを受け取るにはどうしたらいいですか?
-
[解決済み] Apache SparkでDataframeのカラム値をListとして抽出する。
-
[解決済み] Scalaのcaseクラスを宣言することのデメリットは何ですか?
-
[解決済み] Scalaの定数の命名規則?
-
[解決済み] 関数型プログラミング(特にScalaとScala API)におけるreduceとfoldLeft/foldの違いとは?
-
[解決済み] Scala Mapのキーと値の両方をマッピングする
-
[解決済み] Scalaにおける効率的なインデックス付き反復処理
最新
-
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のapply関数とは何ですか?
-
[解決済み] 依存するメソッドタイプの説得力のある使用例とは?
-
[解決済み] ジッパーがコモナドである理由を理解する
-
[解決済み] Scalaです。ScalaのコレクションにおけるTraversableとIterableの違いは何ですか?
-
[解決済み] Scalaでimmutable.Mapをmutable.Mapに変換するにはどうしたらいいですか?
-
[解決済み] scala で複数の case class をマッチングさせる
-
[解決済み] Scala の "new" キーワード
-
[解決済み] Scala における => と () => の意味 [重複].
-
[解決済み] scalaで空リストを宣言し、文字列を追加するには?
-
[解決済み] Intellijのコンパイルに失敗する。"すでに次のように定義されています"