2

假设我有一堂课:

class MyClass {
  val value = new MyClass
}

这不起作用,它会引发堆栈错误。有没有办法使这项工作,所以 value 是MyClass?

4

3 回答 3

4

使这成为可能的最简单方法是使用 a lazy val,在访问它之前不会执行它:

scala> class MyClass { lazy val value = new MyClass }
defined class MyClass

scala> new MyClass
res0: MyClass = MyClass@6a073b72

scala> res0.value
res1: MyClass = MyClass@6b37008a

scala> res1.value
res2: MyClass = MyClass@503f0b70
于 2012-07-10T13:38:18.527 回答
3

我相信您会看到这样的构造会递归地创建无限数量的MyClass对象。

如果你真的想要这样的MyClass对象“链”,你需要某种形式的基本情况来限制递归。

于 2012-07-10T13:23:28.100 回答
0

我有你需要的

class MyClass {
  val value = this
}

但是我想知道这对...有用

于 2012-07-11T14:26:59.853 回答