问题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
我错过了什么?
答案 0 :(得分:5)
问题1:执行Traversable(1,2,3)
时,实际上是在apply
特征的伴随对象上调用Traversable
- 方法。此方法实际上会创建一个List
,其中包含您提供的元素(List
扩展Traversable
)。因此,您调用的foreach
方法实际上是foreach
的{{1}}方法。
问题2:是的,List
是Scala集合层次结构顶部的特征。 Traversable
和List
是一些具体集合的实际示例,而Array
是许多集合实现的一般特征。
问题3:Traversable
和Iterable
不是一回事。你似乎在问题中混淆了它们。 Iterator
与Iterable(1,2,3)
完全相同。它会在Traversable(1,2,3)
的配套对象上调用apply
方法,并为您提供Iterable
。但是,List
会在Iterator(1,2,3)
上调用apply
方法,并为您提供一个新的Iterator
,它会遍历3个数字。