Traversable 是特征还是 class

Is Traversable a trait or a class

问题 1 -

在Scala文档中,我发现Traversable是一个带有抽象方法的trait foreach:

http://www.scala-lang.org/docu/files/collections-api/collections.html

那我为什么要实例化一个Traversable类型的对象呢?

val t = Traversable(1,2,3)

t.foreach(println _) //where is Scala picking foreach a definition from? 

问题 2 - Traversable 与 List 或 Array 等其他 类 有何不同?它是否属于 Seq、Set 或 Map 类别(我认为其他集合继承自 Traversable)

问题 3 - 我可以对 Iterable 特性做完全相同的事情,尽管根据文档,Iterable 有一个抽象方法,iterator:

val v1 = Iterator(1,2,3)

v1.foreach( println _)

我错过了什么?

问题 1:当您执行 Traversable(1,2,3) 时,您实际上是在 Traversable 特征的伴生对象上调用 apply 方法。此方法实际上使用您提供的元素创建了一个 List (List extends Traversable)。因此,您调用的 foreach 方法实际上是 Listforeach 方法。

问题 2:是的,Traversable 是 Scala 中集合层次结构顶部的特征。 ListArray 是一些具体集合的实际示例,而 Traversable 是许多集合实现的一般特征。

问题3:IterableIterator不是一回事。您似乎在问题中混淆了它们。 Iterable(1,2,3) 做与 Traversable(1,2,3) 完全相同的事情。它在 Iterable 的伴生对象上调用 apply 方法并给你一个 List。然而,Iterator(1,2,3) 调用 Iterator 上的 apply 方法,并为您提供一个新的 Iterator 来遍历 3 个数字。