2010-09-12 41 views
4

j'ai écrit une fonction très similaire à ceci:Comment mettre à jour un élément hashmap modifiable dans Scala?

def writeMyEl (x: TypeA, y: TypeB, z : TypeC) { 
    if (myMutableHashMap.contains((x, y))) 
    myMutableHashMap(x, y) = z else 
     myMutableHashMap += (x, y) -> z 
} 

Dans la vraie Types de code A et B sont énumérations et C est une classe de cas. myMutableHashMap est défini comme val de type scala.collection.mutable.HashMap[(TypeA, TypeB), TypeC] dans la même classe que la fonction writeMyEl.

Le compilateur Scala (2.8) dit:

error: too many arguments for method update: (key: (TypeA, TypeB),value: TypeC)Unit 

Qu'est-ce que je fais mal?

Répondre

11

Essayez myMutableHashMap((x, y)) = z. En fait, vous n'avez pas besoin de la vérification, puisque la documentation pour += dit "Ajoute une nouvelle paire clé/valeur à cette carte Si la carte contient déjà un mappage pour la clé, elle sera remplacée par la nouvelle valeur." Donc, votre fonction peut simplement être écrite comme

def writeMyEl (x: TypeA, y: TypeB, z : TypeC) { 
    myMutableHashMap += (x, y) -> z 
}