scala编译器中的Typer如何验证以下内容:
class D[T <: D[T]]
class E extends D[E]
Run Code Online (Sandbox Code Playgroud)
D类型参数的上限D [T]必须与E兼容.E型不等于D,因此将检查其基本类型D. 因为E的基类型和D的类型构造函数相等,所以必须检查边界.这是递归.该核心微积分不处理这种情况.
1)开始于
E extends D[E]
Run Code Online (Sandbox Code Playgroud)
2)Extends意味着Scala中的子类型化,所以
E <: D[E]
Run Code Online (Sandbox Code Playgroud)
3) 由于“类D[T <: D[T]]”的定义,任何D[T]对T的要求是T <: D[T]。步骤 2 表示 E 必须能够插入 T,因此它更好地符合该要求。将 E 替换为 T,我们得到以下要求:
E <: D[E]
Run Code Online (Sandbox Code Playgroud)
我们已经在步骤 2 中显示了 E <: D[E]。我们就完成了。
| 归档时间: |
|
| 查看次数: |
192 次 |
| 最近记录: |