Scala: ленивый поток, вызывающий ошибку: forward ref - PullRequest
0 голосов
/ 02 ноября 2018

Я создал объект 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

}

Почему возникает эта ошибка, это связано с тем, что значение объявлено в функции и в результате оно оценивается, а не интерпретируется лениво?

...