【发布时间】:2021-02-16 09:34:47
【问题描述】:
正如预期的那样,重新分配在 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 中出现错误。
【问题讨论】:
-
REPL 允许您使用新值隐藏旧定义,这对于实验很有用,但可能导致代码晦涩难懂,这就是为什么这只适用于 复制。 - 顺便说一句,注意你也可以在代码中模拟这种行为
{ val x = 1 { val x = 2 } }注意内部块,每个块都可以隐藏以前定义的变量,但是一旦你退出块,旧变量就会再次存在。
标签: scala read-eval-print-loop scala-repl