【Scala】変数のスコープがわからなくなってきたのでテスト

例えば、これは、2と出力される。

val a = 1;
{
  val a = 2 
  println(a)
}

外側の変数は、見えないんだ。

次に、

val a = 1;
{
  println(a)
}

と書く。

外側のaが見えて、1と出力された。

つまり、同名の変数が定義されたとき、外側の変数が見えなくなるということか。

じゃあ、これは?

val a = 1;
{
  println(a)
  val a = 2 
  println(a)
}

感覚的に、1つ目は1と出力されて、2つ目は2と出力されるような気がしてたけど、1つ目のprintln(a)でコンパイルエラーだった。

とにかく、内側では、外側と同名の変数をつくると、後にも先にも内側しか見えなくなるみたいだ。