具体来说,我在这里查看问题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(使用前将#替换为@)