我看到一张照片,上面显示了Scala中的Collections Hierarchy。
看起来在层次结构的顶部有Traversable Trait,再往下一步是Iterable Trait,它有迭代器()函数,接下来是List和Array。。。
创建一个简单的List对象并尝试对其调用迭代器()时抛出一个错误,表明它不是List的一部分。
现在,我知道我可以获得列表的Iterable表示,然后用Iterator对其进行迭代,但我的问题更多的是了解它是如何工作的:list类不应该获得迭代器()函数吗?因为Iterator在同一层次结构中更高?
我是从一个Java开发人员的角度来看待我的问题。
谢谢。
List[A]
,正如您所说,是Iterable[A]
,因此它有一个iterator
方法(不带括号),可以调用该方法来获得列表元素的迭代器:
val it: Iterator[Int] = List(1, 2, 3).iterator
如果你用括号iterator()
来调用它,它就不起作用了,因为迭代器方法是在GenIterableLike
特性中定义的,没有括号:
trait GenIterableLike[+A, +Repr] extends Any with GenTraversableLike[A, Repr] {
def iterator: Iterator[A]
...
您可以在这里阅读scala中的方法调用Arity-0方法可以定义为带括号或不带括号,但如果选择后者(def m = {}
),则不能这样调用它们:m()