TraversableOnce:"集合的模板特征,可以只遍历一次或一次或多次。"
我不明白这句话。为什么可以遍历?不仅一次吗? 谢谢!
答案 0 :(得分:15)
Scaladoc也说
这个特性主要是为了消除Iterator和Traversable之间的代码重复,从而实现一些只能在
foreach
方面实现而无法访问Builder的常用方法。
迭代器只能“遍历”一次。可以遍历Traversable多次。
基本上,TraversableOnce是一个接口,它抽象出你如何处理Iterators和Traversables。您的代码可以接收Iterator或Traversable,并以完全相同的方式处理它们!
为了很好地解释收藏库中使用的许多特征,我相信the Scala 2.8 Collections Design Tutorial的大多数(如果不是全部)仍然是正确的。
答案 1 :(得分:1)
因为有些东西只能遍历一次,例如:
Iterator.continually(readline)
表达式将创建一个迭代器,但它只能遍历一次,否则它必须存储所有读取数据,这在大多数情况下都是浪费。
许多容器可以根据需要遍历多次,例如Array
,Map
等等
如果可以多次遍历Traversable,则可以遍历一次。所以所有Traversable也是TraversableOnce ,TraversableOnce可以至少遍历一次,但也可以多次遍历。
答案 2 :(得分:0)
请注意,在Scala 2.13(2019年6月)中,没有更多的Traversable
和TraversableOnce
:它们仅作为Iterable
和IterableOnce
的别名使用。 (最初是Collections rework的一部分)
IterableOnce
也有相同的句子:
集合的模板特征,该特征只能被遍历一次,也可以被遍历一次。
这次:
目标是提供一个没有任何顺序操作的最小接口。
这样,第三方扩展(例如Scala并行集合)就可以在IterableOnce
级别进行集成,而无需继承不需要的实现。