在Scala Universe设计中键入边界

时间:2016-01-25 20:07:43

标签: scala scala-macros

我已经使用Scala宏/反射/编译器系统打开和关闭了相当长的时间。我理解的一个方面是:为什么scala.reflect.api.Universe(以及其他一些地方)的所有类型都是使用边界定义的?

例如:

type Position >: Null <: api.Position { type Pos = Universe.this.Position }

type PackageDef >: Null <: Universe.PackageDefApi with Universe.MemberDef

这里发生了什么?

1 个答案:

答案 0 :(得分:0)

我将此问题发布到Scala Gitter频道,并收到Paul Phillips的以下回复(转述)。

  • >:上的较低类型绑定Null允许将所有类型设置为null

  • 这是Scala编译器系统面向公众的API。它是通过逆向工程预先存在的类创建的。