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)