I can define a variable (by var) that is immutable:
var x = scala.collection.immutable.Set("aaaaaa","bbbbbb")
println(x.isInstanceOf[scala.collection.immutable.Set[String]])
x += "cccc"
println(x.isInstanceOf[scala.collection.immutable.Set[String]])
This results in:
true
true
+= method is not a member of scala.collection.immutable.Set, so what is happening?
The compiler looks for
x.+= ..., and if it can’t find it, then it tries to transform the statement intox = x + ...(which only succeeds ifxis avar, orxdesugars into a call to someupdatemethod). Sinceimmutable.Setimplements a+operator, andxis avar, this succeeds.