次のように、さまざまなツリー ノードを記述するいくつかの特性を定義したいと思います。
trait Node
trait HasParent {
this: Node =>
type P <: Node with HasChildren
def parent: P
def setParent(parent: P)
}
trait HasChildren {
this: Node =>
def children: Seq[Node]
protected def add[T <: Node with HasParent](child: T) {
child.setParent(this) // error: type mismatch;
// found : HasChildren with Node
// required: child.P
// child.setParent(this)
}
}
このコードがコンパイルされない理由を教えてください。なにが問題ですか?