gpt4 book ai didi

scala - 自类型不符合基类

转载 作者:行者123 更新时间:2023-12-04 16:47:30 29 4
gpt4 key购买 nike

使用以下代码:

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 处收到以下错误案例类:
Illegal inheritance, self-type BasicHello does not conform to Hello[Baz[F, _]]

我不知道为什么编译器不允许这样做,因为 BasicHello扩展 Hello[BasicBaz] ,它依次扩展 Baz[BasicFoo, BasicBar] . BasicHello的类型应该是 Hello[Baz[Foo, Bar]]这正是 World混入需要。是否有一些我缺少自我类型的分层属性?

最佳答案

问题是HelloB 中是不变的.所以,Hello[BasicBaz]不是 Hello[Baz[BasicFoo,BasicBar]] 的子类即使 BasicBazBaz 的子类.

如果您制作 Hello B 中的协变, ( trait Hello[+B <: Baz[_,_]] ),然后它会编译。

关于scala - 自类型不符合基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45023622/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com