NetBeansとScalaで遊ぶ(パターンマッチ編)
前回の続き。
次のコードをステップ実行
val xy = (1, 2) // (a) val (x, y) = xy // (b) val abc = (1, 2, 3) // (c) val (a, b, c) = abc // (d)
タプルを使った代入。
(b)を行った時点で、謎の変数temp1が登場。オブジェクトIDはxyと同じ。
(d)の代入を行った時にtemp1は消滅。temp4が登場、temp4のオブジェクトIDはabcと同じ。
ここで実験、temp1が定義済だったらどうなるか。
val temp1 = "my temp1" // (a) val xy = (1, 2) // (b) val (x, y) = xy // (c) println(temp1) // (d)
別な変数名が割り当てられるという予想だった。
しかし、(c)までは変数ウィンドウに"名前=temp1,型=String,値=my temp1"が表示されていたのに(c)の後のtemp1はxyをと同じオブジェクトIDになってしまった…。
(d)の結果はちゃんと"my temp1"と出力されるのだけれど。
タプルの代入はパターンマッチを使っているので、謎の変数の登場にはパターンマッチが絡んでるという前提で、以下のソースで実験。
val xy = (1, 2) val (x, y) = xy case class Foo(n:Int, s:String) val foo = Foo(1, "foo") foo match { case Foo(1, w) => println(w) case _ => println("unmatch") }
タプルからの代入で出来たtemp1がパターンマッチで消えて、temp9が出来ました。
以上、scalaのコーディングの役には立たない情報ですが、遊びなので。