by shigemk2

当面は技術的なことしか書かない

unchecked since it is eliminated by erasure その2

前回の続き。

www.shigemk2.com

TypeTagを教えていただいたので、早速使います。

TypeTagとは、全ての型情報を実行時に持ち込むオブジェクトのこと。

早速書き換えてみる。

// http://stackoverflow.com/questions/12218641/scala-what-is-a-typetag-and-how-do-i-use-it
import scala.reflect.runtime.universe._

val a = Some(List(1, 2, 3))
val b = Some("hoge")

def printmatch[A : TypeTag](xs: A) = typeOf[A] match {
  case t if t =:= typeOf[Some[List[Int]]] => "option list int"
  case _ => "i have no idea"
}

println(printmatch(a)) // option list int
println(printmatch(b)) // i have no idea

うん、ほぼうまくいきました。

Reflection - 型タグとマニフェスト - Scala Documentation