Scala shell。多次声明相同的varibale名称

时间:2018-04-05 09:58:17

标签: 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>

此处使用varvallazy val

多次声明变量名称“ a

所以我想知道

  1. scala编译器如何使用此功能?例如:val a = 1var a = 2哪个优先级更高?
  2. 为什么Scala shell在多次声明变量的同名时正在接受?
  3. 我如何知道声明变量是可变的还是不可变的,因为相同的变量名称被声明为varval
  4. 注意:在IntelliJ中,能够多次声明相同的变量并且我没有看到错误但是在访问IDE时显示错误为“无法解析varibale”所以使用多次声明相同的变量是什么意思?

1 个答案:

答案 0 :(得分:2)

在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技术粘贴代码块,则冲突中的多个名称将不起作用,并且整个块将被丢弃。