タイプタグを使用して、いくつかのタイプのパラメータを確認できます。
scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._
scala> typeOf[List[Int]]
res0: reflect.runtime.universe.Type = List[Int]
しかし、一般的な方法で、プログラムでその「Int」をそこから取り出す方法を完全に理解することはできません。
(私はREPLを1時間歩き回って、Typeの順列を試し、そこから何が得られるかを確認しています...これが「リスト」であることを示す多くの情報を取得しますが、見つけて幸運を祈りますその"Int"!そして私はtoString()出力の解析に頼りたくありません...)
Daniel Sobralは、ここで優れた(いつものように)簡単な概要を示しています。ここでは、彼は私が探しているものに興味をそそるほど近づいていますが、(明らかに)その特定のクラスについて、そのタイプが尋問:
scala> res0.member(newTermName("head"))
res1: reflect.runtime.universe.Symbol = method head
scala> res1.typeSignatureIn(res0)
res2: reflect.runtime.universe.Type = => Int
しかし、宣言されたメソッドのリストをルート化し、そのうちの1つがタグの現在のタイプ情報をどこかにキャプチャする(したがって公開する)ことを含まない、より一般的なものを望んでいます。
Scalaが「List[Int]」を簡単に印刷できるのなら、文字列パターンマッチングに頼らずに、なぜその「Int」の部分を見つけるのが難しいのでしょうか。それとも、本当に、本当に明白な何かが欠けているだけですか?
scala> res0.typeSymbol.asInstanceOf[ClassSymbol].typeParams
res12: List[reflect.runtime.universe.Symbol] = List(type A)
scala> res12.head.typeSignatureIn(res0)
res13: reflect.runtime.universe.Type =
Grr..。