के साथ बिडरेक्शनल संदर्भ केस केस में एक द्वि-दिशात्मक पेड़ को कार्यान्वित करना संभव है। इस तरह यह आसान होना चाहिए लगता है, लेकिन मैंकेस कक्षा
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
}
}
अभिभावक – Dario