Quantcast
Channel: プラネット NetBeans
Viewing all articles
Browse latest Browse all 4643

nidoの雑記: [Scala][Netbeans]NetBeansとScalaで遊ぶ(パターンマッチ編)

$
0
0

前回の続き。


次のコードをステップ実行

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のコーディングの役には立たない情報ですが、遊びなので。


Viewing all articles
Browse latest Browse all 4643

Latest Images

Trending Articles