Scala 斯卡拉贝壳。多次声明相同的变量名称
在Scala Shell中,我可以多次声明同一个变量,并且不会得到任何错误/警告 比如说Scala 斯卡拉贝壳。多次声明相同的变量名称,scala,read-eval-print-loop,Scala,Read Eval Print Loop,在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> scala>val a=1 a:Int=1 scala>vala=2 a:Int=2 scala>vala=1 a:In
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>
scala>val a=1
a:Int=1
scala>vala=2
a:Int=2
scala>vala=1
a:Int=1
scala>延迟值a=1
a:Int=
这里变量名“a”用var
、val
和lazy val
多次声明
所以我想知道
val a=1
和var a=2
哪个优先级更高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
但是,如果您使用
:pas
技术粘贴一个代码块,多个冲突的名称将不起作用,整个代码块将被丢弃。在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
但是,如果您使用
:pas
技术粘贴一个代码块,那么多个冲突的名称将不起作用,整个代码块将被丢弃。REPL通常为了方便起见允许这样做,其基本思想是,在交互编码时,尤其是通过一次执行几个语句,对标识符的重新定义应该覆盖以前的那些。考虑每一个提示打开一个新的范围。一个RePL通常允许这样做,一般的想法是,当交互编码时,特别是每次执行少量语句时,对标识符的重新定义应该覆盖先前的标识符。考虑每个提示打开一个新的作用域。