如何将TypeRef扩展到别名的类型别名到别名的原始类型(和类型参数)?
如果我有一种类型指的是Option[List[Double]],而我指的是:
case myType @ TypeRef(_, sym, args) if myType <:< typeOf[Option[Any]] ⇒我得到:
sym是Optionargs.head是List[Double],我可以继续使用Double类型进行处理。带类型别名
如果我有一个类型Option[MyType]并键入别名type Mytype = List[Double],那么我需要:
case myType @ TypeRef(_, sym, args) if myType <:< typeOf[Option[Any]] ⇒我明白了:
sym是Optionargs.head是MyType如何使用反射将MyType扩展到List[Double]?我已经能够确定MyType是一个List,但是我无法获得嵌套类型参数Double。
Scaladoc参
TypeRef萃取器
TypeRef(
pre: Universe.Type,
sym: Universe.Symbol,
args: List[Universe.Type])发布于 2013-06-04 07:55:54
我认为normalize方法在Type上可以帮助您:
展开类型别名并将较高类型的TypeRefs转换为PolyTypes。类型上的函数也被实现为PolyTypes。示例:(在下面是List的类型构造函数) TypeRef(pre,List())替换为PolyType(X,TypeRef(pre,List(X)
有一个类型的t,你也可以做一些类似于t.map(_.normalize)的事情。这将使t以及作为t定义一部分的所有类型(例如类型参数)标准化。因此,这将有效地消除t中任何地方发生的别名。
https://stackoverflow.com/questions/16909210
复制相似问题