gpt4 book ai didi

scala - 多次混合相同特征的规则

转载 作者:行者123 更新时间:2023-12-02 07:09:58 25 4
gpt4 key购买 nike

我正在尝试编写一些抽象代码,使其逐步变得更加复杂。它在其中一个台阶上坏了。

第一步,正确

trait Base
trait C1 extends Base

trait Abst extends Base
trait Conc extends Abst with C1

第二步,正确

object BaseHolder {
trait Data
}

object C1Holder {
trait Data extends BaseHolder.Data
}

trait Abst extends BaseHolder.Data
trait Conc extends Abst with C1Holder.Data

第三步,错误

trait BaseHolder {
trait Data
}
object BaseHolder extends BaseHolder

trait C1Holder extends BaseHolder {
trait Data extends super.Data
}
object C1Holder extends C1Holder

trait Abst extends BaseHolder.Data
trait Conc extends Abst with C1Holder.Data

我遇到了错误: 非法继承; trait Con 继承不同类型的 trait Data 实例

这个错误是什么意思,有什么方法可以绕过它吗?

最佳答案

完整的错误信息是

[error]  trait Conc inherits different type instances of trait Data:
[error] C1Holder.Data and BaseHolder.Data
[error] trait Conc extends Abst with C1Holder.Data
[error] ^
[error] one error found

这是说 (object BaseHolder).Data(object C1Holder).Data 不一致,因为尽管后者符合 (trait BaseHolder)# Data,这比单例实例 object BaseHolder 中的 trait Data 更不具体。

编辑。请注意,类型和值存在于不同的命名空间中,因此单独的名称 BaseHolder 是不明确的,它可以指代对象的任一特征。但是,当指代类型时,“.”或“#”符号消除歧义:

  1. T#Data 始终表示 type T 中的 Data 类型成员。例如,BaseHolder#Data 将引用特征 BaseHolder

  2. x.Data 始终表示 object x 中的 Data 类型成员。例如,BaseHolder.Data 将引用单例对象 BaseHolder

请注意 trait BaseHolder 的两个实例 xy 将具有不同的类型 x.Datay.数据;这就是路径依赖类型的工作方式。另请注意,object BaseHolder extends BaseHolder 只是 trait BaseHolder 的一个特定实例。

要让您的代码编译,请确保 (trait C1Holder)#Data 实际上符合 (object BaseHolder).Data

trait BaseHolder {
trait Data
}
object BaseHolder extends BaseHolder

trait C1Holder extends BaseHolder {
trait Data extends BaseHolder.Data // Here BaseHolder refers to singleton object
}
object C1Holder extends C1Holder

trait Abst extends BaseHolder.Data
trait Conc extends Abst with C1Holder.Data

在这个例子中,traits 并没有做太多,所以你可能只想去

object BaseHolder {
trait Data
}

object C1Holder {
trait Data extends BaseHolder.Data
}

trait Abst extends BaseHolder.Data
trait Conc extends Abst with C1Holder.Data

关于scala - 多次混合相同特征的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7051615/

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