En Scala, si je définis une méthode appelée apply
dans une classe ou un objet de niveau supérieur, cette méthode sera appelée chaque fois que j'ajouterai une paire de parenthèses à une instance de cette classe, et que je mettrai les arguments appropriés pour la méthode apply()
entre les deux. Par exemple :
class Foo(x: Int) {
def apply(y: Int) = {
x*x + y*y
}
}
val f = new Foo(3)
f(4) // returns 25
Donc, en gros, object(args)
est juste un sucre syntaxique pour object.apply(args)
.
Comment Scala effectue-t-il cette conversion ?
Y a-t-il une conversion implicite définie globalement, similaire aux conversions implicites de type dans l'objet Predef (mais de nature différente) ? Ou s'agit-il d'une magie plus profonde ? Je pose la question parce qu'il semble que Scala favorise fortement l'application cohérente d'un petit ensemble de règles, plutôt que de nombreuses règles avec de nombreuses exceptions. Au départ, cela me semble être une exception.
1 votes
Très bonne explication, stackoverflow.com/questions/9737352/#9738862