4
我遇到了問題。 scanLeft與Iterator,Stream和視圖不同。我不確定這種差異來自哪裏。 讓我們來看看下面這個例子:scanLeft的非嚴格視圖
scala> (1 to 4).iterator.scanLeft(0)((a,b) => { println(b) ; a + b}).take(2).toList
1
2
res1: List[Int] = List(0, 1)
scala> (1 to 4).toStream.scanLeft(0)((a,b) => { println(b) ; a + b}).take(2).toList
1
res2: List[Int] = List(0, 1)
scala> (1 to 4).view.scanLeft(0)((a,b) => { println(b) ; a + b}).take(2).toList
1
2
3
4
res4: List[Int] = List(0, 1)
最奇怪的是視圖。它表現得像不是懶惰。但是,使用.map時,沒關係。
scala> (1 to 4).view.map{ b => println(b) ; b}.take(2).toList
1
2
res9: List[Int] = List(1, 2)
有人能告訴我原因嗎? 在此先感謝