トップ «前の日記(2003-09-16 (Tue)) 最新 次の日記(2003-09-20 (Sat))» 編集   RSS 1.0 FEED  

Journal InTime


2003-09-19 (Fri) [長年日記]

_ foreach

C#のforeachは、一つのクラスに対しては、一種類の繰り返ししかサポートしないので、 不便だ。

Rubyのforも同じだけど、Rubyの場合はイテレータを使えば、複数の繰り返し (each_lineとeach_byte)とかをサポートできる。

やっぱり、CLUみたいに、

foreach (string x in list.GetEnumerator()) {
   ...
}

とできるようにするべきだったんじゃないだろうか。 (つまり、foreachには、IEnumerableじゃなくて、IEnumeratorを渡すことになる。)

そうすれば、一つのクラスにIEnumeratorを返すメソッドを複数用意すれば、 複数の繰り返しをサポートできるのに。

あ、IEnumeratorをサポートするクラスにthisを返すGetEnumerator()を用意して、 IEnumerableにすればいいのか。 しかし、それもなあ。

ちなみに、Satherのイテレータは

loop
  item1 ::= array1.elt!;
  item2 ::= array2.elt!;
  ...
end

のように複数の繰り返しを並行して行うことができるのでもっと自由度が高い。 (けど、その分動作がわかりにくいきらいがある。)