けいじゅ@今はフリー(^^;;;です. In [ruby-list :03195 ] the message: "[ruby-list:3195] Re: Matrix ", on Jun/30 14:55(+0200) matz / caelum.co.jp (Yukihiro Matsumoto) writes: >|e2mmap.rbはなんかすさまじいですね。 >|# バックトレースにfailが入ってきちゃうのがちょっと残念ですが、 >|# さすがにrubyからバックトレースを操作するのは無理かな。 > >バックトレースっていっても$@に入っている文字列の配列ですから, >rubyの機能だけでちょいちょいと操作できます.石塚さんは操作す >るっていってたのでfailが入っちゃうのはミスではないかと. なんですが... 色々と問題があって, 聞こうと思っていたのですが忘れていま した(^^;;; で, 問題というのは, $@ にバックトレースが設定されるのは, failが呼ばれ てからですよね? (または, callerを呼ぶ?) e2mmap.rbの当該部分を以下のように変えます. def fail(err, *rest) # $@ = caller(1) begin super(err, sprintf(E2MM_ErrorMSG[err], *rest)) rescue $@.pop print $@.pop, ': ', $!, '\n' for m in $@ print '\t', m, '\n' end # fail! end end そうすると, メッセージは正しく出るのですが, このままでは, メッセージを 出して, failメソッドを終了し処理を継続してしまいます. とはいえ, exitす ると今度はこの例外をキャッチすることができません. もう一度, super(...) とすると, そちらでのメッセージが出てしまいます... やりたいこと: 1. 通常の例外と同じ動作を行う 1.1 例外のキャッチができる 1.2 例外が捕捉されなかった時のみメッセージを表示する. 2. 最上段のバックトレースを1つけす. 一体どうしたら良いでしょう? __ .........................................石塚 圭樹@今はフリー(^^;;... ------->>また, アドレス変わりました!! e-mail: keiju / bc.mbn.or.jp <<---