From: FUKUBAYASHI Ippei Date: 2002-03-24T02:46:58+09:00 Subject: [ruby-list:34618] begin expr with while_mod/until_mod 壱平ともうします。最近Rubyで遊ばせていただいています。 MLアーカイブはわりと気をつけてチェックしたのですが,この話題は出て いないようでした。 ドキュメントをみると,begin式にwhile/untilが修飾子がつく 場合は,いわゆる do while の動作をするとありますが, このbegin式にrescue節やensure節がついている場合は, while/until .. end構文と同様の評価をするもようです。 begin p 1 end while false => begin内1回実行 begin p 1 ensure p 2 end while false => begin内0回実行 begin begin p 1 ensure p 2 end end while false => begin内1回実行 うちは1.6.7をふだん使っていますが,いましがた1.7-2002.03.01を いただいてきてみたところ,同じ動作みたいでした。 これはパーザのレベルでそのように実装されているようです。 おぼろげに読んだところでは,ソースがbegin構文であっても, ensureやrescueがついたときには最上位がNODE_BEGINにならないように 読めました。(WHILE_MOD/UNTIL_MODの解析部では,被修飾式がNODE_BEGIN であるかどうかチェックしているだけです) パーザがどういうツリーを作っているのかよく理解していないので, すぐパッチを書くとかできなくて申し訳ないです。 実装を変えるべきか,ドキュメントを変えるべきかは,ちょっと私には 判断できませんが,皆様はどう思われますか。 Sun, 24 Mar 2002 02:21:03 JST -------- 取れないバグは仕様 壱平