使用类型标签,我能看到一些类型的参数:
scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._
scala> typeOf[List[Int]]
res0: reflect.runtime.universe.Type = List[Int]
但我不能完全弄清楚如何以编程方式获取“内部”离开那里,在一般的方式。
(我一直游荡在REPL了一个小时了,试穿型排列,看看有什么我可以从中获得...我得到了很多的事情,表示这是一个“清单”,但好运气在寻找该“内部”!我真的不希望诉诸解析的toString()输出...)
丹尼尔·索布拉尔具有优良的(像往常一样)快速浏览这里 ,在他得到功亏一篑我正在寻找,但(显然)假如你碰巧知道,对于特定类,一些具体的方法,其类型可以是询问:
scala> res0.member(newTermName("head"))
res1: reflect.runtime.universe.Symbol = method head
scala> res1.typeSignatureIn(res0)
res2: reflect.runtime.universe.Type = => 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 =
格儿...