Scala 中有关变量的范围的确切处理是什么?
当我打开大括号时,我仍然可以访问外部变量的值(如果是变量,则修改它们):
scala> var mmm = 4
mmm: Int = 4
scala> {
| println(mmm)
| mmm += 2
| println(mmm)
| }
4
6
scala> println(mmm)
6
但是奥德斯基在第 180 页或他的书中说
在 Scala 程序中,内部变量被称为遮蔽了同名的外部变量,因为外部变量在内部范围内变得不可见。
这似乎更奇怪:
scala> val a = 4
a: Int = 4
scala> {
| println(a)
| }
4
那么我是否可以获得在内部范围内创建的副本?
scala> val a = 4
a: Int = 4
scala> {
| val a = 8
| }
如果 val 是不可变的,为什么我还要再说一遍?
scala> val a = 4
a: Int = 4
scala> {
| println(a)
| val a = 8
| println(a)
| }
但是对于这个我得到一个错误:
error: forward reference extends over definition of value a
println(a)