从这个问题开始,为什么不能 this.type 用于新实例。我想在构造函数中有一个 this.type 对象。我不相信可以做到这一点,但是我希望这里有人知道方法!
这是我的基本特征
trait Node {
def parent:Option[this.type]
}
我已经实现了一个类如下
case class NodeInstance(parentValue:Option[NodeInstance]) extends Node {
def parent = parentValue.asInstanceOf[Option[this.type]]
}
但我想拥有
case class NodeInstance(parent:Option[NodeInstance]) extends Node
但这给出了一个覆盖方法 parent 具有不兼容的类型异常。
我想我不能把它作为继承 NodeInstance 的对象(如果它是一个类的话),会破坏 this.type 要求。但是我想我会检查一下是否有更好的方法来解决这个问题......
现在如果我使用
trait Node[T] { self:T =>
def parent:Option[T]
}
我想要一个返回根节点的函数'root',如果我将它嵌入到特征中
trait Node[T] { self:T =>
def parent:Option[T]
def root:T = this.parent.map(_.root).getOrElse(this)
}
然后我得到编译器异常值 root is not a member of type Parameter T
如果我抽象出根,然后我会得到 T 的类型参数问题
object Node {
def root[T <: Node[?]](node:T):T = node.parent.map(root(_)).getOrElse(this)
}
好的,刚刚发现我可以有 [T <: Node[T]]