具体来说,我在这里看问题1
http://pavelfatin.com/scala-for-project-euler/
列出的代码如下
val r = (1 until 1000).view.filter(n => n % 3 == 0 || n % 5 == 0).sum
我可以遵循除“视图”之外的所有内容 . 事实上,如果我拿出视图代码仍然编译并产生完全相同的答案 .
具体来说,我在这里看问题1
http://pavelfatin.com/scala-for-project-euler/
列出的代码如下
val r = (1 until 1000).view.filter(n => n % 3 == 0 || n % 5 == 0).sum
我可以遵循除“视图”之外的所有内容 . 事实上,如果我拿出视图代码仍然编译并产生完全相同的答案 .
2 回答
View生成一个惰性集合,以便调用例如
filter
不评估集合的每个元素 . 只有在显式访问元素后才会对元素进行评估 . 现在sum
确实访问了所有元素,但是view
对filter
的调用不会创建完整的Vector . (见史蒂夫的评论)使用视图的一个很好的例子是:
在这里,Scala尝试使用
1000000000
元素创建一个集合,然后访问前10个 . 但是查看:我对Scala了解不多,但也许this page可能有帮助......
所以听起来好像代码仍然可以在没有
view
的情况下工作,但理论上可能会做一些额外的工作,以严格而不是懒惰的方式构建集合的所有元素 .