我是Scala的新手,我刚刚了解到创建了LazyList
来替换Stream
,同时他们将.view
方法添加到了所有集合中。
因此,我想知道为什么在我们可以执行LazyList
的情况下将List.view
添加到Scala集合库中?
我只是看了Scaladoc,似乎唯一的区别是LazyList
具有备忘录,而View
没有。我是对还是错?
最佳答案
除了第一个(head)元素之外,Stream
元素的实现是延迟实现的。这被视为一种缺陷。
我很懒惰地重新评估了List
视图,但据我所知,必须首先完全实现它。
def bang :Int = {print("BANG! ");1}
LazyList.fill(4)(bang) //res0: LazyList[Int] = LazyList(<not computed>)
Stream.fill(3)(bang) //BANG! res1: Stream[Int] = Stream(1, <not computed>)
List.fill(2)(bang).view //BANG! BANG! res2: SeqView[Int] = SeqView(<not computed>)