4

私はこれに非常に似た関数を書きました:

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は、関数と同じクラス内valのタイプとして定義されています。scala.collection.mutable.HashMap[(TypeA, TypeB), TypeC]writeMyEl

Scala(2.8)コンパイラは次のように述べています。

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

私は何が間違っているのですか?

4

1 に答える 1

11

試してみてくださいmyMutableHashMap((x, y)) = z。実際、のドキュメントに+=は「このマップに新しいキーと値のペアを追加します。マップにキーのマッピングがすでに含まれている場合は、新しい値で上書きされます」と記載されているため、チェックは必要ありません。したがって、関数は次のように記述できます。

def writeMyEl (x: TypeA, y: TypeB, z : TypeC) {
  myMutableHashMap += (x, y) -> z
}
于 2010-09-12T11:32:33.290 に答える