如何在 Scala 中更新可变的 hashmap 元素?

发布于 2024-09-18 23:33:47 字数 532 浏览 7 评论 0原文

我写了一个与此非常相似的函数:

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 被定义为与 writeMyEl 位于同一类中的 scala.collection.mutable.HashMap[(TypeA, TypeB), TypeC] 类型的 val代码>函数。

Scala (2.8) 编译器说:

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

我做错了什么?

I wrote a function very similar to this:

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

In real code Types A and B are enumerations and C is a case class. myMutableHashMap is defined as a val of type scala.collection.mutable.HashMap[(TypeA, TypeB), TypeC] inside the same class as the writeMyEl function.

The Scala (2.8) compiler says:

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

What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

吻风 2024-09-25 23:33:47

尝试 myMutableHashMap((x, y)) = z。事实上,您不需要检查,因为 += 的文档说“向此映射添加一个新的键/值对。如果映射已经包含该键的映射,它将被新值覆盖。”所以你的函数可以写成

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

Try myMutableHashMap((x, y)) = z. In fact, you don't need the check, since the documentation for += says "Adds a new key/value pair to this map. If the map already contains a mapping for the key, it will be overridden by the new value." So your function can just be written as

def writeMyEl (x: TypeA, y: TypeB, z : TypeC) {
  myMutableHashMap += (x, y) -> z
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文