Collections

2.8のコレクション説明
http://lampwww.epfl.ch/~odersky/whatsnew/collections-api/collections.html
これ読むと見通しがよくなりそうだ。

継承関係

Traversable
 +Iterable
   +Seq
   +Set
   +Map

trait Traversable

すべてのコレクション型のベースになる。
trait Traversableをmixinするクラスは、

def foreach[U](f: Elem => U): Unit

を実装しないといけない。
すべてのコレクションはもうひとつ下の階層のIterableを継承するので、
これを直接継承しているものは無い?

trait Iterable

実質的に、これがすべてのコレクション型のベースになる。
trait Iterableをmixinするクラスは

def iterator: Iterator[A]

を実装しないといけない。
iteratorメソッドを使ってTraversable::foreachはこんな風になる。

def foreach[U](f: Elem => U): Unit = {
  val it = iterator
  while (it.hasNext) f(it.next())
} 

Rubyで言うところのEnumerableに相当する。

Iterator

次のメソッドを実装する

  • it.next()
  • it.hasNext