2017-02-16 44 views
0

我有一個案例類Folder案例類與自我參照構造

case class Folder(children: List[Folder], parent: Folder) 

並創建其子功能:

def createChildrenWith(parent: Folder) = ??? 

我要傳遞的(個體經營)-reference到構造函數內的createChildrenWith:

Folder(createChildrenWith(<ref-to-Folder>), Nil) 

while self is引用文件夾目前正在建設中。

我該如何執行此操作?

PS:parent =無頂級文件夾。

+2

子文件夾應該如何引用父項? –

+0

已更新。感謝你的關注。 –

+0

您從哪些數據生成這些文件夾?你的問題還不清楚。 –

回答

1

你可以使用懶惰。

class Folder(val name: String, p: => Option[Folder], c: => List[Folder]) { 
    lazy val parent = p 
    lazy val children = c 
} 

object Main { 
    def main(args: Array[String]) { 
    lazy val topFolder: Folder = new Folder("F1", None, List(c1, c2, c3)) 
    lazy val c1: Folder = new Folder("C1", Some(topFolder), List.empty) 
    lazy val c2: Folder = new Folder("C2", Some(topFolder), List.empty) 
    lazy val c3: Folder = new Folder("C3", Some(topFolder), List.empty) 

    println(topFolder.children.head.parent.map(_.name).get) 
    } 
} 

但是,我會親自尋找一個沒有循環引用的解決方案。

+0

好吧,我也想出了這個想法。但是,在這種情況下,您需要編寫自己的提取器,因爲您無法再使用模式匹配中的文件夾。 Ty回覆。 –