From: "小西 弘将" Date: 2008-08-20T16:03:59+09:00 Subject: [ruby-list:45360] Q:Array#eachの挙動に関して 小西弘将です。 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