2010-09-12 604 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 
}