Я создал объект 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
}
Почему возникает эта ошибка, это связано с тем, что значение объявлено в функции и в результате оно оценивается, а не интерпретируется лениво?