我已经使用Scala宏/反射/编译器系统打开和关闭了相当长的时间。我理解的一个方面是:为什么scala.reflect.api.Universe
(以及其他一些地方)的所有类型都是使用边界定义的?
例如:
type Position >: Null <: api.Position { type Pos = Universe.this.Position }
或
type PackageDef >: Null <: Universe.PackageDefApi with Universe.MemberDef
这里发生了什么?
答案 0 :(得分:0)
我将此问题发布到Scala Gitter频道,并收到Paul Phillips的以下回复(转述)。
>:
上的较低类型绑定Null
允许将所有类型设置为null
。
这是Scala编译器系统面向公众的API。它是通过逆向工程预先存在的类创建的。