首页 > 解决方案 > scala REPL 和 Intellij 中的 val 行为

问题描述

正如预期的那样,重新分配在 REPL 中给出如下错误

scala> val a=1
a: Int = 1

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

a=2但是下面的重新分配在以 val开头时不会在 REPL 中给出错误。

scala> val a=1
a: Int = 1

scala> val a=2
a: Int = 2

当我在 Intellij 中执行以下代码时,它给出错误。

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

为什么val a=1并且val a=2在 REPL 中没有给出任何错误(如果它只是 a=2 则错误)但在 Intellij 中出现错误。

标签: scalaread-eval-print-loopscala-repl

解决方案


来自Scala 文档 REPL 概述

  • 每行输入都是单独编译的。
  • 对前几行的依赖包含在自动生成的导入中。

结合这两个事实,我们可以理解它们不在同一个命名空间中,这与您提供的示例不同,其中 2 个被调用的变量x在同一个类中。


推荐阅读