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