gpt4 book ai didi

斯卡拉 HashMap : doesn't += reassign to left hand side?

转载 作者:行者123 更新时间:2023-12-04 17:56:34 25 4
gpt4 key购买 nike

我正在阅读 Seven Languages in Seven Weeks体验不同的编程范式。在关于 Scala 的章节中,我发现集合是不可变的(至少 scala.collection.immutable 中的那个)。
但是,有一个让我感到困惑的例子:

scala> val hashMap = HashMap(0->0)
scala> hashMap += 1->1
scala> hashMap
res42: scala.collection.mutable.HashMap[Int,Int] = Map(1 -> 1, 0 -> 0)

但是

scala> map = map + 2->2
<console>:9: error: reassignment to val
map = map + 2->2

+= 重新分配一个不可变集合吗? += 如何在 = 失败时重新分配 val HashMap
此外,我尝试了其他集合(ListMap)以及“原始”(Int)和 += 因重新分配错误而失败。怎么样HashMap特别吗?我没有阅读 Scala API 中的任何特定内容,也找不到 += 运算符的定义(我假设它是一个运算符而不是一个函数,即使在 Scala 中,以及在 C++ 或Java).
很抱歉提出这个愚蠢的问题,但由于我是 Scala 的新手,所以我很难自己找到资源。

最佳答案

你是对的,这适用于 var,编译器可以在其中使用

hashMap += 1->1

然后将其脱糖

hashMap = hashMap + 1->1

但是还有另一种可能性。如果您的 hashMapscala.collection.mutable.hashMap 类型,那么它会直接调用定义在该类型上的 += 方法:

hashMap.+=(1->1)

没有 val 被重新分配, map 只是在内部改变自己。

关于斯卡拉 HashMap : doesn't += reassign to left hand side?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21634341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com