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