在Scala中,“视图”有什么作用?

2024-04-20

具体来说,我在这里查看问题1

http://pavelfatin.com/scala-for-project-euler/ http://pavelfatin.com/scala-for-project-euler/

列出的代码如下

val r = (1 until 1000).view.filter(n => n % 3 == 0 || n % 5 == 0).sum

除了“查看”之外,我可以跟踪所有内容。事实上,如果我取出视图,代码仍然可以编译并产生完全相同的答案。


View 生成一个惰性集合,以便调用例如filter不要评估集合中的每个元素。元素仅在显式访问后才会被评估。现在sum确实访问所有元素,但是使用view打电话给filter不创建完整的向量。 (参见史蒂夫的评论)

使用视图的一个很好的例子是:

scala> (1 to 1000000000).filter(_ % 2 == 0).take(10).toList
java.lang.OutOfMemoryError: GC overhead limit exceeded

这里 Scala 尝试创建一个集合1000000000然后访问前 10 个元素。但是有了视图:

scala> (1 to 1000000000).view.filter(_ % 2 == 0).take(10).toList
res2: List[Int] = List(2, 4, 6, 8, 10, 12, 14, 16, 18, 20)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Scala中,“视图”有什么作用? 的相关文章

随机推荐