【问题标题】:Scala: what is trait TraversableOnce? What's the different between TraversableOnce and Traversable?Scala:什么是 TraversableOnce 特征? TraversableOnce 和 Traversable 有什么区别?
【发布时间】:2016-04-05 05:37:16
【问题描述】:

TraversableOnce:“集合的模板特征,可以仅遍历一次或一次多次。”

我不明白这句话。为什么可以遍历更多次?不是只有一次吗? 谢谢!

【问题讨论】:

    标签: scala


    【解决方案1】:

    请注意,对于 Scala 2.13(2019 年 6 月),不再有 TraversableTraversableOnce:它们仅作为 IterableIterableOnce 的已弃用别名保留。 (最初是Collections rework的一部分)

    IterableOnce也有同一句话:

    集合的模板特征,可以只遍历一次,也可以遍历一次或多次。

    这次:

    目标是提供一个没有任何顺序操作的最小接口。
    这允许第三方扩展(如 Scala 并行集合)在 IterableOnce 级别集成,而不会继承不需要的实现。

    【讨论】:

      【解决方案2】:

      因为有些东西只能遍历一次,例如:

      Iterator.continually(readline)
      

      表达式会创建一个迭代器,但只能遍历一次,否则必须存储所有读取的数据,这在大多数情况下是一种浪费。

      许多容器可以任意多次遍历,比如ArrayMap等等

      如果一个 Traversable 可以被多次遍历,那么它肯定可以被遍历一次。所以所有的 Traversable 也是 TraversableOnce,TraversableOnce 可以被至少遍历一次,也可以被多次遍历。

      【讨论】:

        【解决方案3】:

        Scaladoc 也说

        此 trait 的存在主要是为了消除 Iterator 和 Traversable 之间的代码重复,因此实现了一些可以仅根据 foreach 实现而无需访问 Builder 的常用方法。

        迭代器只能被“遍历”一次。一个 Traversable 可以被遍历多次。

        本质上,TraversableOnce 是一个抽象出您如何处理迭代器和 Traversable 的接口。您的代码可以接收 Iterator 或 Traversable 并以完全相同的方式处理它们!

        为了很好地解释 Collections 库中使用的许多特征,我相信大部分(如果不是全部)the Scala 2.8 Collections Design Tutorial 仍然是正确的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-06-03
          • 1970-01-01
          • 2018-05-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-15
          相关资源
          最近更新 更多