Man*_*dha 3 iterator scala traversable
问题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?
Run Code Online (Sandbox Code Playgroud)
问题2 - Traversable与List或Array等其他类有何不同?它是否属于Seq,Set或Map类别(我认为其他集合继承自Traversable)
问题3 -我能为做完全相同Iterable,即使按文档,可迭代有一个抽象方法,特点iterator:
val v1 = Iterator(1,2,3)
v1.foreach( println _)
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
问题1:当你这样做时Traversable(1,2,3),你实际上apply是在Traversable特征的伴随对象上调用-method .此方法实际上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个数字.