Có thể thực hiện một cây hai chiều trong một lớp vỏ. Điều này có vẻ như nó phải là dễ dàng, nhưng tôi bị bối rốiTham chiếu hai chiều với các kiểu chữ hoa
case class Node(name:String, parent:Option[Node], children:List[Node])
Tôi muốn thêm một đứa trẻ (và có được một gốc mới) - một cái gì đó giống như
def addChild(n:String):Node = {
Node(name, parent, Node(n, Some(this), Nil)::children)
}
Nhưng điều đó sẽ không làm việc vì "cha mẹ" trong đứa trẻ sẽ không còn tham chiếu đến Nút liệt kê đứa trẻ khi còn nhỏ. Điều này có thể xảy ra với các danh sách bất biến và các lớp chữ hoa chữ thường không?
Dựa trên câu trả lời đưa ra dưới đây
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
}
}
Hãy thử đánh giá lười biếng của phụ huynh – Dario