essayer de déterminer comment surcharger des parenthèses sur une classe.
J'ai ce code: P>
var a = new App(Map("1" -> "2"))
a("1") // same as a.values("1")
4 Réponses :
Vous devez définir un Appliquer code> méthode.
Je pense que cela fonctionne en utilisant Appliquer: Comment s'appliquera la méthode de Scala () Magic travailler? p>
Comme d'autres personnes ont déjà noté, vous souhaitez surcharger pendant que vous y êtes, vous voudrez peut-être surcharger l'objet compagnon appliquer également. : p> alors vous pouvez: p> si c'est un avantage ou une confusion dépendra de ce que vous " en essayant de faire. p> p> appliquer code>:
En complétude, il convient de dire que votre "Apply" peut prendre plusieurs valeurs et que "la mise à jour" fonctionne comme double de "appliquer", permettant de "surcharger des parenthèses" sur le côté gauche des affectations
Class PairMap[A, B, C]{
val contents: mutable.Map[(A,B), C] = new mutable.Map[(A, B), C]();
def apply(a:A, b:B):C = contents.get((a, b))
def update(a:A, b:B, c:C):Unit = contents.put((a, b), c)
}
val foo = new PairMap[String, Int, Int]()
foo("bar", 42) = 6
println(foo("bar", 42)) // prints 6