Scala Universe 设计中的类型边界

Type bounds in Scala Universe design

我断断续续地使用 Scala macro/reflection/compiler 系统工作了相当长的时间。一方面我无法理解:为什么 scala.reflect.api.Universe(和其他一些地方)中的所有类型都使用边界定义?

例如:

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

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

这是怎么回事?

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

  • Null 上的下限类型 >: 允许将所有类型设置为 null

  • 这是Scala编译系统面向API的public。它是由预先存在的 类.

  • 逆向工程创建的