Рассмотрим следующий пример:Mutable или Immutable Set?
scala> val myset = Set(1,2)
myset: scala.collection.immutable.Set[Int] = Set(1, 2)
scala> myset += 3
<console>:9: error: reassignment to val
myset += 3
^
scala> var myset = Set(1,2)
myset: scala.collection.immutable.Set[Int] = Set(1, 2)
scala> myset += 3
scala> myset
res47: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
В одном случае я могу добавить «АЛЕКС», а в другом я не могу. Я знаю разницу между val и var. Однако то, что меня смутило в обоих случаях, Скала говорит мне, что Набор неизменен, но он позволяет различное поведение.
Я не хочу так просто, потому что в oncase myset есть val, а в одном это var. Я хочу получить более глубокий ответ, чтобы объяснить, почему в обоих случаях Scala говорит, что myset является неизменным набором, но все же рассматривает оба по-разному. Потому что это счетчик интуитивно.
Например, существует ли какая-либо разница с использованием набора mutuable и объявления неизменяемого набора как var? И почему scala позволяет вам сгибать правила? Не было бы лучше, если бы это было сказано неизменным, это означало это?
Спасибо.