2010-09-12 66 views
4

我寫的非常相似,這樣的功能:如何更新Scala中的可變HashMap元素?

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

在真正的代碼類型A和B是枚舉,C是一個案例類。 myMutableHashMap被定義爲類型爲scala.collection.mutable.HashMap[(TypeA, TypeB), TypeC]val,與​​函數在同一類中。

斯卡拉(2.8)編譯器說:

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

我在做什麼錯?

回答

11

嘗試myMutableHashMap((x, y)) = z。實際上,您不需要檢查,因爲+=的文檔中提到「向此映射添加新的鍵/值對,如果映射已經包含鍵的映射,它將被新值覆蓋。」所以你的功能可以寫成:

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