0

重複の可能性:
Scala の apply() メソッド マジックはどのように機能しますか?

私は Scala のまったくの初心者で、適用関数が「オーバーロードされた () 演算子」のようなものである Scala の本の 1 つを読んだ後、どのように定義されているのか疑問に思い始めました。つまり、演算子 () は、従来の中置 a () b 表記ではなく、ブラケット自体の間の引数を取ります。そのような演算子の定義はScalaで可能ですか?もしそうなら、定義構文は何ですか? ありがとう。

4

1 に答える 1

3

質問ですでに述べたように、と呼ばれるメソッド (関数ではない)を定義するだけで定義できますapply

foo(bar, baz)

に翻訳されます

foo.apply(bar, baz)

したがって、正しいアリティとタイプのメソッドfooがある限り、これは機能します。apply

applyメソッドの実装の例としては、Arrayを呼び出して配列を作成できるコンパニオン オブジェクトArray(1, 2, 3)(実際にはArray.apply(1, 2, 3)) や、Array呼び出して配列要素にアクセスできるクラスanArray(i)(実際には だけanArray.apply(i)) があります。

これは、関数呼び出しが演算子への呼び出しに変換される Python や、フォームの式が に変換される__call__Ruby などに似ています。foo.(bar, baz)foo.call(bar, baz)

同様の方法はupdate次のとおりです。

foo(bar) = baz

に翻訳されます

foo.update(bar, baz)
于 2012-07-28T23:28:09.160 に答える