У меня есть изменяемая карта, содержащая другую изменчивую карту, как со значениями по умолчанию. После того, как я присвою значение одному ключу на прилагаемой карте, его значение по умолчанию, похоже, изменится. I.e. Я ожидал, что anotherDefault будет иметь значение Map (1 -> default), NOT Map (1 -> something).Вложенная карта withDefaultValue меняет значение по умолчанию
Почему это происходит?
scala> import scala.collection.mutable.{Map => MMap}
import scala.collection.mutable.{Map=>MMap}
scala> val amap = Map[Int, MMap[Int, String]]().withDefaultValue(MMap().withDefaultValue("default"))
amap: scala.collection.immutable.Map[Int,scala.collection.mutable.Map[Int,String]] = Map()
scala> val bmap = amap(2)
bmap: scala.collection.mutable.Map[Int,String] = Map()
scala> bmap(1)
res17: String = default
scala> bmap(1) = "something"
scala> val anotherDefault = amap(3)
anotherDefault: scala.collection.mutable.Map[Int,String] = Map(1 -> something)
Если это так, то это означает, что withDefaultValue() на изменяемую карте бесполезно , или даже ввести в заблуждение? – Adrian
Совсем нет - 'bmap (4)' будет по-прежнему выдавать значение «default», а не бросать исключение NoSuchElementException. – Shadowlands
Таким образом, значение defaultValue не является неизменным, и мы можем неосознанно изменять значение по умолчанию. Это несколько неожиданно. – Adrian