トップ «前の日記(2002-11-13 (Wed)) 最新 次の日記(2002-11-18 (Mon))» 編集   RSS 1.0 FEED  

Journal InTime


2002-11-15 (Fri) [長年日記]

_ C#のイテレータ

C#では

foreach (Object o in list) {
  ...
}

のようにforeach文を使うと、listから外部イテレータを取り出して自動的に 繰り返し処理の制御を行ってくれる。 実は前にJavaで書いたスクリプト言語でも同じようなことをしたけど、利用者 側から見れば内部イテレータのように使える(つまり、自分で繰返しの制御をする 必要がない)ので結構便利。

さらに将来のC#では、イテレータを定義する時に

public class List {
  internal object[] elements;
  internal int count;

  public object foreach()
  {
    foreach(object o in elements)
    {
      yield o;
    }
  }
}

のようなコードを書くと、外部イテレータクラスを自動的に生成してくれるらしい。

ruby-devでこれは外部イテレータか内部イテレータかという話があったが、ユーザ が外部イテレータクラスを意識する必要はないので、内部イテレータと言ってもいい ような気がする。