斯卡拉内心阶级懒惰

时间:2013-01-25 18:15:53

标签: scala

我有不可变的类Outer和Inner如下:

class Outer(val intra: Outer#Inner) {
    class Inner(val q: Int)
}

我想创建一个外部和内部的实例,它们相互引用,如下所示:

val outer = new Outer(inner)
val inner = new outer.Inner(5)

但是,当然,这段代码不能编译,因为在第二行定义之前,第一行引用了“inner”值。

如果我在这两行的“val”关键字之前添加了“lazy”关键字,它会编译但是在运行时会出现堆栈溢出异常。

我知道如果我像这样使类Outer可变,我可以解决这个问题:

class Outer(var intra: Outer#Inner) {
    class Inner(val q: Int)
}
val outer = new Outer()
val inner = new outer.Inner(5)
outer.intra = inner

但我想让这些类保持不变。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您可以像这样更改定义:

class Outer(_intra: => Outer#Inner) {
  lazy val intra = _intra
  class Inner(val q: Int)
}