4

次のように、さまざまなツリー ノードを記述するいくつかの特性を定義したいと思います。

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)
    }
}

このコードがコンパイルされない理由を教えてください。なにが問題ですか?

4

1 に答える 1