斯卡拉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”被多次声明为var
、val
和lazy val
所以我想知道
- scala 编译器是如何处理这个的?例如:
val a = 1
和 var a = 2
哪个优先级更高?
- 为什么 Scala shell 在多次声明同名变量时接受?
- 我如何知道声明的变量是可变的还是不可变的,因为相同的变量名称被声明为
var
和 val
?
注意:在 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
技术粘贴代码块,多个名称发生冲突将不起作用,整个代码块将被丢弃。
在 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”被多次声明为var
、val
和lazy val
所以我想知道
- scala 编译器是如何处理这个的?例如:
val a = 1
和var a = 2
哪个优先级更高? - 为什么 Scala shell 在多次声明同名变量时接受?
- 我如何知道声明的变量是可变的还是不可变的,因为相同的变量名称被声明为
var
和val
?
注意:在 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
技术粘贴代码块,多个名称发生冲突将不起作用,整个代码块将被丢弃。