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