小西弘将です。

Array#eachの挙動についてちょっと嵌ったので、質問します。
手元にあるRubyでeachの挙動をみると次のwhile文と等価に見えます。まあ、そ
のままリソースを食いつぶすまで動き続けます。
これはこれでよいのですが、この動作はすべてのバージョンで保証されるので
しょうか?
私の感覚としては、現在の実装がそうなっているだけで、挙動は保証しないとい
う見解が正しいように思えます。
なぜ嵌ったかというと、eachのイメージとして、each開始前の集合を順に渡すと
いうイメージがあったためです。間抜けといわれればそうですが嵌りました。
こっちも割とありそうなイメージなので、こちらの方が驚きが少ないと思われる
場合、each中の自己挿入は禁止すべきだと思うのですが、実装は難しい感じがし
ます。

確認したRubyのバージョンは
	ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
です。

1.eachのコード
	a = [0,1,2,3,4,5]
	a.each do |n|
		a << n*2
	end

2.1と等価なコード
	a = [0,1,2,3,4,5]
	i = 0
	while( i < a.size ) do
		n = a[i]
		a << n*2
		i = i + 1
	end