如何将TypeRef
扩展为别名的原始类型(和类型参数)的类型别名?
如果我的类型指的是Option[List[Double]]
,我会这样做:
case myType @ TypeRef(_, sym, args) if myType <:< typeOf[Option[Any]] ⇒
我明白了:
sym
是Option
args.head
为List[Double]
,我可以继续使用Double
类型进行处理。使用类型别名
如果我有Option[MyType]
类型并输入别名type Mytype = List[Double]
并且我这样做:
case myType @ TypeRef(_, sym, args) if myType <:< typeOf[Option[Any]] ⇒
我明白了:
sym
是Option
args.head
是MyType
如何通过反思将MyType
扩展为List[Double]
?我已经确定MyType
是List
,但我无法获得嵌套类型参数Double
。
Scaladoc参考
TypeRef(
pre: Universe.Type,
sym: Universe.Symbol,
args: List[Universe.Type])
答案 0 :(得分:4)
我认为normalize
上的Type
方法可以帮助您:
扩展类型别名并将更高级别的TypeRef转换为PolyTypes。 类型上的函数也实现为PolyTypes。例如:(在 下面是List的类型构造函数)TypeRef(pre,,List())是 替换为PolyType(X,TypeRef(pre,,List(X)))
拥有t
类型,您也可以执行t.map(_.normalize)
之类的操作。这将标准化t
以及属于t
定义的所有类型(例如类型参数)。这样就可以有效地消除t
中任何地方出现的任何别名。