Chạy:Scala Suối nhầm lẫn
lazy val s: Stream[Int] = 1 #:: 2 #:: {val x = s.tail.map(_+1); println("> " + x.head); x}
s.take(5).toList
tôi mong đợi:
> List(2, 3)
> List(2, 3, 4)
List(1, 2, 3, 4, 5)
Và tôi nhận được:
> 3
List(1, 2, 3, 4, 5)
Ông có thể giải thích cho tôi?
Tại sao bạn mong đợi 'x.head' trả về một danh sách? – sepp2k
Điều làm tôi bối rối là lý do tại sao trên trái đất bạn muốn đặt một 'println' bên trong định nghĩa của một val lười biếng. –
@Dan: Để tìm hiểu khi nào và tần suất biểu thức sẽ thực thi (và những giá trị khác nhau sẽ như thế nào), tôi hình dung. – sepp2k