conundrumです。様は勘弁... :-) yahataさんのおっしゃること、半分は、間違いではないと思いいます。 > > 私も begin - ensure - end を使ったのですが、強制終了した場合には、 > > EXCEL.exeが残ってしまいます。結局は、プログラムで終了しなければならない よ >う > > です。本来は、不用意に終了した場合に、実行すると理解していましたが、必ず し > > も真でないと思いました。間違いでしょうか。 上記文面における「不用意に終了」ってのが、くせ者ですね。 begin - ensure - end の endure は、 Rubyインタプリタはまだ生きていて、 begin 〜 ensure の間で誰かが例外を throw してきたら、 Rubyインタプリタが 『やれやれ、困ったさんだな〜 後片付けはやっといたけるね』 というケースで有効なものだと、わたしは考えています。 で、 >このことを確認するスクリプトを作成しました。実行中に強制終了した場合に、 >begin - ensure - end を利用しても、EXCEL.exeが残ることは確認しました。これ に >は、はっきりした理由があると思いますが、如何でしょうか。 これはですね、わたしが誤認していなければ、 Rubyインタプリタ自体が、begin 〜 ensure の間で、 お亡くなりになってる。 南無三。 だと。 こうなってしまっては、手も足も出せるはずがなく、ensure は実行されるわけもな く、 EXCEL.exe は取り残される、と。 最初に「半分」と書いたのは、「不用意に終了」が、上記の両方を含意しているよう に 思えたからです。 たとえば、同じようなことをJavaで書いたとしましょうか。 その場合でも、try 〜 finally の間に、何らかの理由で JVM がお亡くなりになった ら、 finally は実行されませんよね。 う〜、これ以上書くと馬脚を現しそうなので、やめとこう。 anyway, 例外(Exception) と Rubyインタプリタの停止 は区別すべきか、と。 [ハズしていませんように](祈) _________________________________________________________________ MSN Hotmail が贈る Hot Xmas × VOGUE http://promotion.msn.co.jp/hotmail/xmas/index.html 素敵なクリスマスコフレを プレゼント