壱平ともうします。最近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
--------
取れないバグは仕様

壱平