原です。

In message "[ruby-list:12924] delete during each (Re:  Sieve of Eratosthenes)"
    on 99/03/17, Yukihiro Matsumoto <matz / netlab.co.jp> writes:
|
|まつもと ゆきひろです

|質問をまとめると each の最中に要素を削除した時に「正常に」動
|作するか,ということですよね.

そうです。曖昧な質問ですいません。つまり array.each {} の中で
array を変化させたときうまく動くか、という問題です。

|正常の定義によりますが,現状(と作者の意図)は
|
|  * each最中に要素を削除しても異常終了することはない

それは安心。

|  * ただし,削除しなかったすべての要素に対して繰り返しを行う
|    ことは保証しない

この「保証しない」というのが気になるのですが、

  array.each {|x| } のループというのは、今まで何回処理した
  かを記録した内部カウンタ c がひとつずつ増やされ、x には
  毎回その時点での array に対する array[c] が代入される

と考えてよいのでしょうか。例えば

  a = [1,2,3,4]
  a.each do |i|
    p i
    a.delete_if do |x|
      i == 2 && x == 3
    end
  end

の結果は 1,2,4 になるということでいいでしょうか?