斯卡拉shell。多次声明相同的变量名

Scala shell. Declare same varibale name multiple times

在 Scala Shell 中,我可以多次声明同一个变量,但我没有得到任何 error/warning

例如

scala> val a = 1
a : Int = 1
scala> val a = 2
a : Int = 2
scala> val a = 1
a : Int = 1
scala> lazy val a = 1
a : Int = <lazy>

此处变量名“a”被多次声明为varvallazy val

所以我想知道

  1. scala 编译器是如何处理这个的?例如:val a = 1var a = 2 哪个优先级更高?
  2. 为什么 Scala shell 在多次声明同名变量时接受?
  3. 我如何知道声明的变量是可变的还是不可变的,因为相同的变量名称被声明为 varval

注意:在 IntelliJ 中,能够多次声明同一个变量并且我没有看到错误但是在访问 IDE 时显示错误为 "Can not resolve varibale" 那么声明同一个变量有什么用多次?

在 repl 中,经常会进行实验和原型设计,重新定义 val 通常不是错误的,而是有意的。

按您输入的优先,终于成功了。

scala> val a: Int = 7
a: Int = 7

scala> val a: Int = "foo"
<console>:12: error: type mismatch;
 found   : String("foo")
 required: Int
       val a: Int = "foo"
                    ^

scala> a
res7: Int = 7

如果您不确定某个名称是否已被使用,您可以直接键入该名称,例如我的 a,并获得反馈。对于未声明的值,您将得到:

scala> b
<console>:13: error: not found: value b
       b
       ^

但是如果您使用 :pas 技术粘贴代码块,多个名称发生冲突将不起作用,整个代码块将被丢弃。