许多Iterable 的子类覆写了Iteable的foreach标准实现,因为它们能提供更高效的实现。记住,foreach是Traversable所有操作的基础,所以它的性能表现很关键。

    1. xs: List[Int] = List(1, 2, 3, 4, 5)
    2. scala> val git = xs grouped 3
    3. git: Iterator[List[Int]] = non-empty iterator
    4. res3: List[Int] = List(1, 2, 3)
    5. scala> git.next()
    6. scala> val sit = xs sliding 3
    7. scala> sit.next()
    8. res5: List[Int] = List(1, 2, 3)
    9. scala> sit.next()
    10. res6: List[Int] = List(2, 3, 4)
    11. res7: List[Int] = List(3, 4, 5)

    当只有一个迭代器可用时,Trait Iterable增加了一些其他方法,为了能被有效的实现的可遍历的情况。这些方法总结在下面的表中。

    例如序列,使用用的是位置索引,它里面的元素的总是从0开始编号。即Seq(1, 2, 3)(1) 为2。例如sets,使用的是成员测试。例如Set('a', 'b', 'c')('b') 算出来的是true,而Set()('a')为false。最后,maps使用的是选择。比如Map('a' -> 1, 'b' -> 10, 'c' -> 100)('b') 得到的是10。