W Scali, jeśli zdefiniuję metodę o nazwie apply
w klasie lub obiekcie najwyższego poziomu, ta metoda zostanie wywołana za każdym razem, gdy dodaję parę nawiasów do instancji tej klasy, i wstawię odpowiednie argumenty dla apply()
pomiędzy im. Na przykład:W jaki sposób działa magiczna metoda Scali()?
class Foo(x: Int) {
def apply(y: Int) = {
x*x + y*y
}
}
val f = new Foo(3)
f(4) // returns 25
Więc zasadniczo object(args)
jest po prostu cukier syntaktyczny dla object.apply(args)
.
W jaki sposób Scala wykonuje tę konwersję?
Czy jest tutaj globalnie zdefiniowana niejawna konwersja, podobna do niejawnych konwersji typów w obiekcie Predef (ale innego rodzaju)? A może jest to trochę głębsza magia? Pytam, ponieważ wygląda na to, że Scala zdecydowanie preferuje konsekwentne stosowanie mniejszego zbioru reguł, a nie wiele reguł z wieloma wyjątkami. To początkowo wydaje mi się wyjątkiem.
Bardzo dobre wyjaśnienie, http://stackoverflow.com/questions/9737352/#9738862 –