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 は、多くの例外を含む多くのルールよりも、より小さなルール セットを一貫して適用することを強く支持しているように思われるためです。これは、最初は例外のように思えます。