是否可以在案例类中实现双向树。这似乎应该很容易,但我被难住了
case class Node(name:String, parent:Option[Node], children:List[Node])
我想添加一个孩子(并获得一个新的根)——比如
def addChild(n:String):Node = {
Node(name, parent, Node(n, Some(this), Nil)::children)
}
但这不起作用,因为孩子中的“父母”将不再引用将孩子列为孩子的节点。这对于不可变列表和案例类是否可行?
根据下面给出的答案
case class Node(name: String, parent: () => Option[Node], children: List[Node]) {
def makeChild(name: String) = {
lazy val newParent:Node = Node(this.name, this.parent, kid :: this.children)
lazy val kid:Node = Node(name, () => Some(newParent), Nil)
newParent
}
}