3

问题 1 -

在 Scala 文档中,我发现 Traversable 是一个带有抽象方法的特征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)

Iterable问题 3 -即使根据文档,Iterable 有一个抽象方法,我也可以对 trait 做同样的事情iterator

val v1 = Iterator(1,2,3)

v1.foreach( println _)

我错过了什么?

4

1 回答 1

5

问题 1:当你这样做时Traversable(1,2,3),你实际上是在traitapply的伴生对象上调用 - 方法。Traversable此方法实际上List使用您提供的元素 ( Listextends Traversable) 创建一个。foreach因此,您调用的方法foreach实际上是List.

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

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

于 2016-11-29T17:58:06.827 回答