Sau đây là cả hai cách để tạo Luồng số nguyên:Khi nào một luồng cần phải lười?
val s: Stream[Int] = 1 #:: s.map(_ + 1)
def makeStream = {
val s: Stream[Int] = 1 #:: s.map(_ + 1)
s
}
Đầu tiên là tiền phạt; Tuy nhiên phương pháp makeStream
sẽ không biên dịch:
error: forward reference extends over definition of value s
val s: Stream[Int] = 1 #:: s.map(_ + 1)
^
Nó chỉ biên dịch nếu chúng ta làm s
một lazy val
. Tại sao nó cần phải là một lazy val
trong một phương pháp, nhưng không phải ở bên ngoài?