gpt4 book ai didi

scala - 为什么可以改变 immutable.SortedMap 和 immutable.TreeMap?

转载 作者:行者123 更新时间:2023-12-02 06:30:43 36 4
gpt4 key购买 nike

为什么可以改变 scala.collection.immutable.SortedMapscala.collection.immutable.TreeMap

scala> import scala.collection.immutable.SortedMap
import scala.collection.immutable.SortedMap

scala> var sm = SortedMap(3 -> 'x', 1 -> 'x', 4 -> 'x')
sm: scala.collection.immutable.SortedMap[Int,Char] = Map(1 -> x, 3 -> x, 4 -> x)

scala> sm += (2 -> 'x')

scala> sm
res1: scala.collection.immutable.SortedMap[Int,Char] = Map(1 -> x, 2 -> x, 3 -> x, 4 -> x)

另外,我没有看到

http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.SortedMap

http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.TreeMap

一个+=的定义,那么它是怎么存在的呢?

最佳答案

我同意语法使它看起来像你正在改变对象,但实际上 += 操作只是对原始添加的语法糖(使用 + 运算符),然后重新分配(当原始变量是 var 时)。所以:

scala> import scala.collection.immutable.SortedMap
import scala.collection.immutable.SortedMap

scala> var sm = SortedMap(3 -> 'x', 1 -> 'x', 4 -> 'x')
sm: scala.collection.immutable.SortedMap[Int,Char] = Map(1 -> x, 3 -> x, 4 -> x)

scala> sm += (2 -> 'x')

scala> sm
res1: scala.collection.immutable.SortedMap[Int,Char] = Map(1 -> x, 2 -> x, 3 -> x, 4 -> x)

相当于:

scala> var sm2 = SortedMap(3 -> 'x', 1 -> 'x', 4 -> 'x')
sm2: scala.collection.immutable.SortedMap[Int,Char] = Map(1 -> x, 3 -> x, 4 -> x)

scala> sm2 = sm2 + (2 -> 'x')
sm2: scala.collection.immutable.SortedMap[Int,Char] = Map(1 -> x, 2 -> x, 3 -> x, 4 -> x)

您可以通过尝试使用 val 来查看:

scala> val sm3 = SortedMap(3 -> 'x', 1 -> 'x', 4 -> 'x')
sm3: scala.collection.immutable.SortedMap[Int,Char] = Map(1 -> x, 3 -> x, 4 -> x)

scala> sm3 += (2 -> 'x')
<console>:10: error: value += is not a member of scala.collection.immutable.SortedMap[Int,Char]
sm3 += (2 -> 'x')

要进行比较,请查看此可变映射:

scala> val sm4 = scala.collection.mutable.Map[Int, Char](1 -> 'x')
sm4: scala.collection.mutable.Map[Int,Char] = Map(1 -> x)


scala> sm4.put(2, 'x')
res6: Option[Char] = None

scala> sm4
res7: scala.collection.mutable.Map[Int,Char] = Map(2 -> x, 1 -> x)

在这里,我们能够更改 val 映射的内容,只有当对象是可变的时才能执行此操作。

关于scala - 为什么可以改变 immutable.SortedMap 和 immutable.TreeMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38089435/

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