首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于类型别名的思考

关于类型别名的思考
EN

Stack Overflow用户
提问于 2013-06-04 03:07:16
回答 1查看 396关注 0票数 1

如何将TypeRef扩展到别名的类型别名到别名的原始类型(和类型参数)?

如果我有一种类型指的是Option[List[Double]],而我指的是:

代码语言:javascript
复制
case myType @ TypeRef(_, sym, args) if myType <:< typeOf[Option[Any]] ⇒

我得到:

  • symOption
  • args.headList[Double],我可以继续使用Double类型进行处理。

带类型别名

如果我有一个类型Option[MyType]并键入别名type Mytype = List[Double],那么我需要:

代码语言:javascript
复制
case myType @ TypeRef(_, sym, args) if myType <:< typeOf[Option[Any]] ⇒

我明白了:

  • symOption
  • args.headMyType

如何使用反射将MyType扩展到List[Double]?我已经能够确定MyType是一个List,但是我无法获得嵌套类型参数Double

Scaladoc参

TypeRef萃取器

代码语言:javascript
复制
TypeRef(
  pre: Universe.Type,
  sym: Universe.Symbol,
  args: List[Universe.Type])
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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中任何地方发生的别名。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16909210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档