2010-09-12 6 views
4

Я написал функцию, очень похожую на это:Как обновить измененный элемент hashmap в Scala?

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

В реальных типах кода А и В перечислениях и C является случай классом. myMutableHashMap определяется как val типа scala.collection.mutable.HashMap[(TypeA, TypeB), TypeC] в том же классе, что и функция writeMyEl.

Скала (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 
}