scala – scanLeft的非严格视图

我遇到了一个问题. scanLeft与Iterator,Stream和视图的工作方式不同.我不确定这种差异来自哪里.
我们来看看这个例子:

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)

有人可以告诉我原因吗?
提前致谢

解决方法

这是视图中的错误.有很多这样的错误.有关详情,请参见 https://issues.scala-lang.org/browse/SI-4332. (我对2013年1月4日的评论是我注意到你对scanLeft做了同样的事情.)

由于它们存在许多质量问题,我从不在自己的代码中使用视图,也不建议将其用于其他人.

正在努力用更好的东西取代观点;在此期间,我建议将它们视为已弃用,即使它们尚未正式弃用.

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...