在当前的Scala中,是否有更简洁的方法来执行"惰性构造函数模式"

Owe*_*wen 10 constructor scala lazy-evaluation

最近的事情

case class Foo(lazy next: Foo)
Run Code Online (Sandbox Code Playgroud)

我能想到的是

class Foo(_next: =>Foo) {
    lazy val next = _next
}
object Foo {
    def apply(next: =>Foo) = new Foo(next)
    def unapply(foo: Foo) = Some(foo.next)
}
Run Code Online (Sandbox Code Playgroud)

我发现一个列出的问题添加了懒惰的参数,所以我想它有一天会被添加.与此同时,有没有人知道比上述更清洁的伎俩?

mis*_*tor 7

也许scalaz.Need?在这个答案中向我建议了这一点.

scala> case class Foo(next: Name[Foo])
defined class Foo

scala> lazy val x: Foo = Foo(Need(y)); lazy val y: Foo = Foo(Need(x))
x: Foo = <lazy>
y: Foo = <lazy>

scala> x.next.flatMap(_.next).value eq x
res61: Boolean = true
Run Code Online (Sandbox Code Playgroud)