我创建了一个Stream对象,如下所示:
object Stream {
def cons[A](hd: => A, tl: => Stream[A]): Stream[A] = {
lazy val head = hd
lazy val tail = tl
Cons(() => head, () => tail)
}
def empty[A]: Stream[A] = Empty
}
当我用它创建一个懒惰的流时,我发现在函数内部创建流但声明为实例值时没有错误(我不理解)。
object testStream {
val myStream: Stream[Int] = Stream.cons(72, myStream) // OK
def doStuff: Unit =
val xStream: Stream[String] = Stream.cons(" start ", xStream) // Error: forward reference extends over definition
}
为什么会发生此错误,这是由于在函数中对值进行了十进制表示而导致的结果是对其求值,而不是延迟解释吗?