Scala 2.10 リフレクションを使用して、メソッド引数の最も派生した型を見つけようとしています。たとえば、次のプログラムを考えてみましょう。
import reflect.runtime.universe._
object ReflectionTest {
def checkType[A : TypeTag](item: A) {
println("typeOf[A]: " + typeOf[A])
}
def main(args: Array[String]) {
val a = Array(1, "Hello")
for (item <- a) checkType(item)
}
}
ここa
には Array[Any] 型があるため、送信される各アイテムcheckType
の型は Any になります。その結果、checkType
アウトプット
typeOf[A]: Any
typeOf[A]: Any
TypeTag は呼び出しの時点でコンパイラによって生成されるため、これは私には理にかなっています (型について知っているのは、それが であるということだけですAny
)。しかし、私が望むのは、各アイテムの実際のタイプを決定することです。次の行に沿って何かを出力したい
Int
String
ここでドキュメントを調べました
http://docs.scala-lang.org/overviews/reflection/overview.html
しかし、サンプルはこのケースをカバーしていないようで、Environment、Universe、Mirror の議論は理解しにくいと思います。私がやろうとしていることはかなり単純なはずですが、おそらく私は完全に間違っています。