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