次の点を考慮してください。
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)
「alex」を追加できる場合もあれば、追加できない場合もあります。val と var の違いを知っています。ただし、両方のケースで私を混乱させたのは、Scala が Set は不変であるが、異なる動作を許可することを教えてくれます。
oncase myset は val であり、1 つは var であるため、私はそうしたくありません。どちらの場合も、Scala は myset が不変セットであると言いながら、両方を異なる方法で扱う理由を説明するために、それよりも深い答えが必要です。直感に反するからです。
たとえば、可変セットを使用し、不変セットを var として宣言することに違いはありますか? では、なぜ scala はルールを曲げることができるのでしょうか? 不変と言われたら、それはそれを意味するのではないでしょうか?
ありがとう。