Scala集合层次结构

时间:2016-04-07 14:21:37

标签: scala collections

我正在查看一张显示Scala中的收藏层次结构的照片。

在层次结构的顶部看起来有Traversable Trait,其中一步是Iterable Trait,它具有iterator()函数,并且在路上有List和Array ......

创建一个简单的List对象并尝试在其上调用iterator()会抛出一个错误,表示它不是List的一部分。

现在,我知道我可以获得列表的Iterable表示,然后使用Iterator迭代它,但我的问题更多的是理解这个东西是如何工作的:不应该让List类得到iterator()函数迭代器在同一层次结构中更高?

我正在Java开发人员的眼中看待我的问题。

谢谢。

1 个答案:

答案 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()