2017-02-16 62 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回复。 –