scalaread-eval-print-loopscala-repl

val behavior in scala REPL and Intellij


as expected reassignment is giving error like below in REPL

scala> val a=1
a: Int = 1

scala> a=2
<console>:12: error: reassignment to val
       a=2
        ^

But the below reassignment is not giving error in REPL when a=2 preceded with val.

scala> val a=1
a: Int = 1

scala> val a=2
a: Int = 2

When I execute the below code in Intellij its giving error.

object Test {
  def main(args: Array[String]) {
    val x = 1
    val x = 2
  }
}

Why val a=1 and val a=2 are not giving any error in REPL(error if it is only a=2) but error in Intellij.


Solution

  • 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.