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

时间:2012-02-04 23:37:02

标签: scala constructor lazy-evaluation

最接近的事情

case class Foo(lazy next: Foo)
我能够提出的是

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

我找到了列出的问题add lazy parameters,所以我猜它会被添加 有一天。与此同时,有没有人知道比上面更清洁的伎俩?

1 个答案:

答案 0 :(得分:7)

也许scalaz.Need?这是this answer中向我建议的。

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