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
方法实际上是 List
的 foreach
方法。
问题 2:是的,Traversable
是 Scala 中集合层次结构顶部的特征。 List
和 Array
是一些具体集合的实际示例,而 Traversable
是许多集合实现的一般特征。
问题3:Iterable
和Iterator
不是一回事。您似乎在问题中混淆了它们。 Iterable(1,2,3)
做与 Traversable(1,2,3)
完全相同的事情。它在 Iterable
的伴生对象上调用 apply
方法并给你一个 List
。然而,Iterator(1,2,3)
调用 Iterator
上的 apply
方法,并为您提供一个新的 Iterator
来遍历 3 个数字。
问题 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
方法实际上是 List
的 foreach
方法。
问题 2:是的,Traversable
是 Scala 中集合层次结构顶部的特征。 List
和 Array
是一些具体集合的实际示例,而 Traversable
是许多集合实现的一般特征。
问题3:Iterable
和Iterator
不是一回事。您似乎在问题中混淆了它们。 Iterable(1,2,3)
做与 Traversable(1,2,3)
完全相同的事情。它在 Iterable
的伴生对象上调用 apply
方法并给你一个 List
。然而,Iterator(1,2,3)
调用 Iterator
上的 apply
方法,并为您提供一个新的 Iterator
来遍历 3 个数字。