gpt4 book ai didi

class - 自类型注释阻碍了内部类的实例化。为什么?

转载 作者:行者123 更新时间:2023-12-01 09:35:50 27 4
gpt4 key购买 nike

鉴于 Outer 类及其 Inner 类的抽象定义,我想实例化在 中定义的具体 Inner1 类Outer1 特质。

abstract class Outer {
type Inner_Tp <: Inner;
abstract class Inner {
self: Inner_Tp =>
}
}

trait Outer1 {
self: Outer =>
protected class Inner1 extends Inner {
self: Inner_Tp =>
}
def Inner1() = new Inner1()
}

Scala 编译器过早地终止编译,给我以下错误消息:“错误:类 Inner1 无法实例化,因为它不符合其自身类型 Outer1.this.Inner1 和 Outer1.this.Inner_Tp”。 为什么?

毕竟 Inner1 类是在一个抽象上下文中定义的,即它的 Outer1 特征。我想推迟 type Inner_Tp 的定义,直到 trait 被混合到某个具体的类中。

最佳答案

对于Inner1,self 类型表示它总是与抽象类型Inner_Tp 一起实例化。这是一个在实例化点没有实现的 promise :类型只是 Inner1 而不是 Inner1 with Inner_Tp

如果您需要延迟定义Inner_Tp,您还需要延迟创建任何将其作为自身类型的实例。这是绝对必要的,因为您无法生成您还不知道的类型的值。所以最好让方法抽象。您也可以细化抽象类型:

trait Outer1 extends Outer {
type Inner_Tp <: Inner1
protected class Inner1 extends Inner

def Inner1(): Inner_Tp
}

我不确定你在追求什么,但你可能根本不需要 self 类型(为了简洁起见,我已经将它们省略了)。

关于class - 自类型注释阻碍了内部类的实例化。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8214407/

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