gpt4 book ai didi

循环引用特征的 Scala 类型错误

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

我无法让此代码正常工作。我想创建一个特征,允许继承它的类拥有“子项”,但显然,ChildsetParent 方法需要一个 P,但得到的是 Parent[P, C]

package net.fluffy8x.thsch.entity

import scala.collection.mutable.Set

trait Parent[P, C <: Child[C, P]] {
protected val children: Set[C]
def register(c: C) = {
children += c
c.setParent(this) // this doesn't compile
}
}

trait Child[C, P <: Parent[P, C]] {
protected var parent: P
def setParent(p: P) = parent = p
}

最佳答案

您需要使用 self 类型来指示 thisP而不是Parent[P, C] 。这也需要额外的界限 P <: Parent[P, C]C <: Child[C, P]

trait Parent[P <: Parent[P, C], C <: Child[C, P]] { this: P =>
protected val children: scala.collection.mutable.Set[C]
def register(c: C) = {
children += c
c.setParent(this)
}
}

trait Child[C <: Child[C, P], P <: Parent[P, C]] { this: C =>
protected var parent: P
def setParent(p: P) = parent = p
}

关于循环引用特征的 Scala 类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28332220/

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