原です。 > まつもと ゆきひろです. > failの第2引数が例外であった場合,第1引数を無視していました. $! の実態は例外だったんですね。 > |では、RuntimeError を発生しますが、これを直前の error_type の > |再発生(でメッセージを "string" にしたもの)にする手もあるか > |と思うのですがいかがでしょう。 > fail "error" > > を > > fail RuntimeError, "error" > > の代わりに使っているプログラムの意味を変えちゃうんで(たぶん, > 関係ない例外名になってしまう),ちょっとまずいですね.こうい その問題があることは分かっていました。^^; > うことをすることが必要であるということになれば,たとえば > > reraise ["message"] > > で,直前の例外を再発生,messageが指定されれば同じ型でメッセー > ジだけ変えるなんて仕様には出来ると思いますけど. > > でも,必要ですか? どうしてもというわけではないのですが、$@ の様なトレースを 自前で構成しようと思っていて、例えば、 FooError が複数の経路のメソッド呼びだしののちに起こるとして、 それを経路を $! に記録しながら rescue していくとします。す ると経路の途中のメソッドでは、次の様に記述するわけです。 def bar ... begin 次のメソッド呼びだし rescue FooError raise FooError, "bar->" + $! rescue ... end ... end で、FooError 一つならこれぐらい手間でもないのですが、 FooError1, FooError2,... と増えると、関連するメソッド全て に、そのための rescue 節を増やしていかねばならないわけで、 それは面倒かな、、、と。 rescue reraise "bar->" + $! で済むならちょっと便利ですね。引数なしの fail と機能が重なっ ちゃうのが何ですが。