原です。

In message "[ruby-list:12931] Re: delete during each (Re:  Sieve of Eratosthenes)"
    on 99/03/17, WATANABE Hirofumi <watanabe / ase.ptg.sony.co.jp> writes:
|
|わたなべです.

|:  array.each {|x| } のループというのは、今まで何回処理した
|:  かを記録した内部カウンタ c がひとつずつ増やされ、x には
|:  毎回その時点での array に対する array[c] が代入される
|:
|:と考えてよいのでしょうか。
|
|今の実装はそうなってます.
|こんな感じ.
|
|class Array
|  def each
|    c = 0
|    while c < self.size
|      yield self[c]
|      c += 1
|    end
|  end
|end

なるほど。毎回 self と self.size を評価し直すのですね。
じゃあそれをあてこんでプログラムしていいのかな。