自型不符合基数class
Self-type does not conform to base class
使用以下代码:
trait Hello[B <: Baz[_, _]]
trait World[F <: Foo] { self: Hello[Baz[F, _]] =>
def foo: F
}
trait Baz[F <: Foo, B <: Bar]
trait Foo
trait Bar
case class BasicHello() extends Hello[BasicBaz] with World[BasicFoo]
case class BasicBaz() extends Baz[BasicFoo, BasicBar]
case class BasicFoo() extends Foo
case class BasicBar() extends Bar
我的 IDE 在 BasicHello
案例 class 中出现以下错误:
Illegal inheritance, self-type BasicHello does not conform to Hello[Baz[F, _]]
我不知道为什么编译器不允许这样做,因为 BasicHello
扩展了 Hello[BasicBaz]
,后者又扩展了 Baz[BasicFoo, BasicBar]
。 BasicHello
的类型应该是 Hello[Baz[Foo, Bar]]
这正是 World
混入所需要的。是否有一些分层 属性 我缺少自我类型?
问题是 Hello
在 B
中是不变的。因此,Hello[BasicBaz]
不是 Hello[Baz[BasicFoo,BasicBar]]
的子类,尽管 BasicBaz
是 Baz
的子类。
如果在 B
中使 Hello
协变,(trait Hello[+B <: Baz[_,_]]
),那么它会编译。
使用以下代码:
trait Hello[B <: Baz[_, _]]
trait World[F <: Foo] { self: Hello[Baz[F, _]] =>
def foo: F
}
trait Baz[F <: Foo, B <: Bar]
trait Foo
trait Bar
case class BasicHello() extends Hello[BasicBaz] with World[BasicFoo]
case class BasicBaz() extends Baz[BasicFoo, BasicBar]
case class BasicFoo() extends Foo
case class BasicBar() extends Bar
我的 IDE 在 BasicHello
案例 class 中出现以下错误:
Illegal inheritance, self-type BasicHello does not conform to Hello[Baz[F, _]]
我不知道为什么编译器不允许这样做,因为 BasicHello
扩展了 Hello[BasicBaz]
,后者又扩展了 Baz[BasicFoo, BasicBar]
。 BasicHello
的类型应该是 Hello[Baz[Foo, Bar]]
这正是 World
混入所需要的。是否有一些分层 属性 我缺少自我类型?
问题是 Hello
在 B
中是不变的。因此,Hello[BasicBaz]
不是 Hello[Baz[BasicFoo,BasicBar]]
的子类,尽管 BasicBaz
是 Baz
的子类。
如果在 B
中使 Hello
协变,(trait Hello[+B <: Baz[_,_]]
),那么它会编译。