
Untitled
By: a guest on
Jun 17th, 2012 | syntax:
None | size: 0.70 KB | hits: 16 | expires: Never
Bidirectional Links in Traits with Different Types
val parentOrder = new ParentOrder
val childOrder = new ChildOrder
childOrder.addParent(parentOrder)
trait PolyTree[T <: PolyTree[T, C], C <: PolyTree[T, C]] { self: T =>
private val _parents: ListBuffer[T] = ListBuffer()
private val _children: ListBuffer[C] = ListBuffer()
def addParent(parent: T): PolyTree[T, C] = {
_parents += parent
parent._children += this // Error
this
}
def addChild(child: C): PolyTree[T, C] = {
_children += child
child._parents += this
this
}
}
trait PolyTree[T <: PolyTree[T, C], C <: PolyTree[T, C]] { self: T with C => ...