En Scala, si defino un método llamado apply
en una clase o un objeto de nivel superior, ese método se llamará cada vez que agregue un par de paréntesis a una instancia de esa clase y coloque los argumentos apropiados apply()
entre ellos. Por ejemplo:
class Foo(x: Int) {
def apply(y: Int) = {
x*x + y*y
}
}
val f = new Foo(3)
f(4) // returns 25
Básicamente, object(args)
es solo azúcar sintáctico para object.apply(args)
.
¿Cómo Scala realiza esta conversión?
¿Hay una conversión implícita definida globalmente aquí, similar a las conversiones de tipo implícitas en el objeto Predef (pero de diferente tipo)? ¿O es una magia más profunda? Lo pregunto porque parece que Scala favorece fuertemente la aplicación consistente de un conjunto más pequeño de reglas, en lugar de muchas reglas con muchas excepciones. Esto inicialmente me parece una excepción.