在 Scala Shell 中,我可以多次声明相同的变量,但我没有得到任何错误/警告
例如
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"被多次声明,包括var
、val
和lazy val
所以我想知道
- Scala complier 是如何接受这个的?例如:
val a = 1
和var a = 2
哪个优先级更高? - 为什么 Scala shell 在多次声明相同变量名称的同时接受?
- 我如何知道声明的变量是可变的还是不可变的,因为相同的变量名称被声明为
var
和val
?
注意:在IntelliJ中,能够多次声明相同的变量,我没有看到错误,但是在访问IDE时将错误显示为"无法解析变量",那么多次声明相同的变量有什么用?
在 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
技术粘贴代码块,则冲突中的多个名称将不起作用,并且整个块将被丢弃。