问题描述
由于预期的重新分配导致REPL中出现以下错误
df$Type[grepl("GaraGE|PARKING|LOT",df$Name)]<-"Parking&Garage"
但是当scala> val a=1
a: Int = 1
scala> a=2
<console>:12: error: reassignment to val
a=2
^
前面带有val时,以下重新分配不会在REPL中产生错误。
a=2
scala> val a=1
a: Int = 1
scala> val a=2
a: Int = 2
为什么object Test {
def main(args: Array[String]) {
val x = 1
val x = 2
}
}
和val a=1
在REPL中没有给出任何错误(如果仅为a = 2,则为错误),而在Intellij中则为错误。
解决方法
- 每一行输入都是单独编译的。
- 对前几行的依赖性包括在自动生成的导入中。
结合这两个事实,我们可以了解到它们不在同一个名称空间中,这与您提供的示例不同,两个名为$ hadoop fs -put /path/to/directory/000000_0 /path/to/directory/data.parquet
的变量在同一个类中。
REPL用于快速无摩擦实验。如果您只是因为您故意val a = 32
时误输入了val a = 23
而不得不从头开始,那会非常令人讨厌。
因此,REPL的设计方式使其具有打破Scala规则的外观,尽管实际上并没有。与您输入的代码相对应的经过实际编译的代码看起来像这样:
object line$1 {
val a=1
}
object line$2 {
import line$1._
val a=2
}