Scalaは、Javaと同様の消去モデル(erasure model)のジェネリックプログラミングを使っており、実行時に型引数の情報を管理しない。
これは型消去と呼ばれ、コップ本の270-272あたりに書いてある。配列だけが型消去の例外と言われるが、具体的な回避方法はよくわからない。すくなくともこのパターンにおいては。
val a = Some(List(1, 2, 3)) val b = Some("hoge") def printmatch[A](a: Option[A]) = a match { // warning: non-variable type argument List[Int] in type pattern Option[List[Int]] is unchecked since it is eliminated by erasure case a: Option[List[Int]] => println("option list int") case _ => println("i have no idea") } printmatch(a) // option list int printmatch(b) // option list int // 期待してたのと違う
- 作者: Martin Odersky,Lex Spoon,Bill Venners,羽生田栄一,水島宏太,長尾高弘
- 出版社/メーカー: インプレスジャパン
- 発売日: 2011/09/27
- メディア: 単行本(ソフトカバー)
- 購入: 12人 クリック: 235回
- この商品を含むブログ (46件) を見る