我正在查看一张显示Scala中的收藏层次结构的照片。
在层次结构的顶部看起来有Traversable Trait,其中一步是Iterable Trait,它具有iterator()函数,并且在路上有List和Array ......
创建一个简单的List对象并尝试在其上调用iterator()会抛出一个错误,表示它不是List的一部分。
现在,我知道我可以获得列表的Iterable表示,然后使用Iterator迭代它,但我的问题更多的是理解这个东西是如何工作的:不应该让List类得到iterator()函数迭代器在同一层次结构中更高?
我正在Java开发人员的眼中看待我的问题。
谢谢。
答案 0 :(得分:4)
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 here中阅读有关方法调用的信息。 Arity-0 方法可以使用或不使用括号来定义,但是如果你选择后者(def m = {}
),则不能像这样调用它们:m()