gpt4 book ai didi

scala - 为什么不可能覆盖已经实现的抽象类型?

转载 作者:行者123 更新时间:2023-12-04 06:07:55 25 4
gpt4 key购买 nike

给定以下代码:

class A {

class B

type C <: B

trait D

}

class E extends A {

type C = B

}

class F extends E {

override type C = B with D

}

为什么 Eclipse Indigo IDE 中的 Scala IDE 演示编译器会报错并显示错误消息 覆盖类 E 中的类型 C,它等于 F.this.B; C 型具有不兼容的类型 ?

毕竟类“B”只是用特征“D”“修改”,因此两个类型定义具有相同的基本类型,即“B”。因此兼容的类型定义。

下面的代码 作品 .我认为类型分配的规则类似于变量分配,例如:
class Foo

trait Bar

val a: Foo = new Foo

val fooWithBar: Foo = new Foo with Bar

我的理解错了吗?

最佳答案

它们不兼容,类型 C 可能用于逆变位置

class E extends A {
type C = B
def f(c: C)
}


class F extends E {
override type C = B with D
def f(c: ???)
}


给定 e: E ,您可以调用 e.f(new B) .如果 eval e = new F ?

关于scala - 为什么不可能覆盖已经实现的抽象类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8771229/

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