微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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做了同样的事情.)

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐