as expected reassignment is giving error like below in REPL
scala> val a=1
a: Int = 1
scala> a=2
:12: error: reassignment to val
a=2
The REPL is intended for rapid friction-less experimentation. It would be very annoying if you had to restart from scratch just because you accidentally mistyped val a = 32
when you meant val a = 23
.
Therefore, the REPL is designed in such a way that it gives the appearance of breaking the rules of Scala, although it actually doesn't. The code that gets actually compiled corresponding to the code you entered looks a little bit like this:
object line$1 {
val a=1
}
object line$2 {
import line$1._
val a=2
}
From Scala docs REPL overview:
- every line of input is compiled separately.
- dependencies on previous lines are included by automatically generated imports.
Combining these two facts, we can understand that they are not in the same namespace, unlike the example you provided which 2 variables called x
are in the same class.