问题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)

问题3-即使根据文档,Iterable有一个抽象方法Iterable,我也可以对iterator特性进行完全相同的操作:
val v1 = Iterator(1,2,3)

v1.foreach( println _)

我想念什么?

最佳答案

问题1:执行Traversable(1,2,3)时,实际上是在apply特性的伴随对象上调用Traversable-方法。此方法实际上使用您提供的元素创建List(List扩展了Traversable)。因此,您正在调用的foreach方法实际上是foreachList方法。

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

问题3:IterableIterator是不同的东西。您似乎在问题中混淆了它们。 Iterable(1,2,3)Traversable(1,2,3)完全相同。它在apply的伴随对象上调用Iterable方法,并为您提供List。但是,Iterator(1,2,3)会在apply上调用Iterator方法,并为您提供一个新的Iterator,它可以循环访问3个数字。

10-08 12:32