Scala の型消去( type erasure )
昨日のコップの会にて、型消去(type erasure)が*1出てきました。
scala> def isIntIntMap(x: Any) = x match { | case m: Map[Int,Int] => true //←ここのInt,Int型情報が実行時には消える。 | case _ => false | } warning: there were unchecked warnings; re-run with -unchecked for details isIntIntMap: (x: Any)Boolean scala> isIntIntMap(Map("abc"->"abc")) //String,Stringなのにtrue res0: Boolean = true
ジェネリック型は、実行時に型情報が消去される。ただしArrayは消去されないらしい。
どこかで見たなーと思って探したらありました。
Scala勉強会@東北のMLでymnkさんが解説してました。
http://groups.google.co.jp/group/scala--tohoku/browse_thread/thread/2858a1b7807929c5?pli=1
あとこちらにものってました。
http://sites.google.com/site/scalamemo/ouyou/kata-shisutemu
*1:コップ本p.258