8
votes

Puis-je surcharger des parenthèses à Scala?

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")


0 commentaires

4 Réponses :


20
votes

Vous devez définir un Appliquer méthode. XXX


0 commentaires

4
votes

Je pense que cela fonctionne en utilisant Appliquer: Comment s'appliquera la méthode de Scala () Magic travailler?


0 commentaires

5
votes

Comme d'autres personnes ont déjà noté, vous souhaitez surcharger appliquer : xxx

pendant que vous y êtes, vous voudrez peut-être surcharger l'objet compagnon appliquer également. : xxx

alors vous pouvez: xxx

si c'est un avantage ou une confusion dépendra de ce que vous " en essayant de faire.


0 commentaires

9
votes

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


0 commentaires