Scala:覆盖带边界的类型成员

时间:2015-05-08 07:50:58

标签: scala types mixins traits type-bounds

我已将我的问题缩小到以下最小(非)工作示例:

class Z
trait A[E <: Z] { type T[X <: E] <: A[X] }
trait B[E <: Z] extends A[E] { type T[X <: E] <: B[X] }
trait C[E <: Z, F[X <: Z] <: C[X, F]] extends A[E] { type T[X <: E] = F[X] }
class D[E <: Z] extends B[E] with C[E, D]

它是一种更高级的F-有界多态性(我使用T [E]作为某些方法的返回值)。当我尝试编译这段代码时,我得到:

error: overriding type T in trait B with bounds[X <: E] <: B[X];
 type T in trait C, which equals [X <: E]D[X] has incompatible type

但是,鉴于DB的子类型,同一E传递给BC,因此类型不应该& #39; t不相容。 Martin Odersky在这个question中解释说,当在mixin中合并一个成员时,有两个规则:1)具体而不是抽象和2)线性化顺序。在这种情况下,两者都是&#34;具体的&#34;类型所以我们去2)。但是线性化顺序表明C应该胜过B,所以我想知道我在这里出错了什么。

0 个答案:

没有答案