Когда потоку нужно быть ленивым?

Оба нижеследующих предназначены для создания потока целых чисел:

val s: Stream[Int] = 1 #:: s.map(_ + 1)

def makeStream = {
  val s: Stream[Int] = 1 #:: s.map(_ + 1)
  s
}

Первое - нормально; однако метод makeStream не компилируется:

error: forward reference extends over definition of value s
  val s: Stream[Int] = 1 #:: s.map(_ + 1)
                             ^

Он компилируется, только если мы сделаем s lazy val . Почему это должно быть lazy val в методе, но не вне его?

12
задан Luigi a.k.a. Rhys 5 August 2011 в 22:25
поделиться