Scala 关于类型别名的思考
如何将Scala 关于类型别名的思考,scala,reflection,types,macros,Scala,Reflection,Types,Macros,如何将TypeRef扩展到别名的原始类型(和类型参数)的类型别名 如果我有一个类型引用了选项[List[Double]],我会: case myType @ TypeRef(_, sym, args) if myType <:< typeOf[Option[Any]] ⇒ case myType @ TypeRef(_, sym, args) if myType <:< typeOf[Option[Any]] ⇒ 我明白了: sym是选项 args.headisMy
TypeRef
扩展到别名的原始类型(和类型参数)的类型别名
如果我有一个类型引用了选项[List[Double]]
,我会:
case myType @ TypeRef(_, sym, args) if myType <:< typeOf[Option[Any]] ⇒
case myType @ TypeRef(_, sym, args) if myType <:< typeOf[Option[Any]] ⇒
我明白了:
是sym
选项
isargs.head
MyType
MyType
扩展到List[Double]
?我已经能够确定MyType
是一个列表
,但是我无法获取嵌套类型参数Double
Scaladoc参考文件 :
我认为
Type
上的normalize
方法可以帮助您:
展开类型别名并将更高种类的TypeRef转换为多类型。
类型上的函数也实现为多类型。例:(在
下面是列表的类型构造函数)TypeRef(pre,,List())是
替换为PolyType(X,TypeRef(前,列表(X)))
拥有一个类型
t
,您还可以执行类似t.map(u.normalize)
的操作。这将规范化t
以及属于t
定义一部分的所有类型(例如类型参数)。因此,这将有效地消除t
中任何地方出现的任何别名,我认为类型上的规范化
方法可能会帮助您:
展开类型别名并将更高种类的TypeRef转换为多类型。
类型上的函数也实现为多类型。例:(在
下面是列表的类型构造函数)TypeRef(pre,,List())是
替换为PolyType(X,TypeRef(前,列表(X)))
拥有一个类型t
,您还可以执行类似t.map(u.normalize)
的操作。这将规范化t
以及属于t
定义一部分的所有类型(例如类型参数)。因此,这将有效地消除t
中出现的任何别名,这正是我所需要的。谢谢正是我需要的。谢谢
TypeRef(
pre: Universe.Type,
sym: Universe.Symbol,
args: List[Universe.Type])