From: Minero Aoki Date: 2000-06-08T12:58:40+09:00 Subject: [ruby-list:23104] Re: http.rb will change あおきです。 In mail "[ruby-list:23100] Re: http.rb will change" matz@netlab.co.jp (Yukihiro Matsumoto) wrote: > まつもと ゆきひろです > |Net::HTTP#get, head, post などのメソッドは現状では > |成功以外のステータスでは例外を発生するのですが、 > |やはりこれだとまずいことが多いので(talk でも指摘されてしまった)、 > |例外なしに変更しようと思います。 > > 良く知らないんですが、例外になるもの、ならないものというよう > な分類はありえないんですか? それとも合意できないから発生さ > せないと統一させた方が良いのでしょうか。 リトライ可能なものは全て RetriableError で飛んでくるので、 RetriableError は投げないってのはあると思います。 でも、受けとれることを想定しているのもほぼ間違いなく このタイプですから、これを投げないってことは結局コードは 全部変更してもらわないといけなくなります。 ではそれ以外は例外にしてもいいかというと、例外が発生すると Response オブジェクトが受けとれなくなるので、例外が発生した原因すらわからなくなります。 つまり、例外になってうれしい状況というのは、一回例外が起きたら アプリケーションが終了するような「やっつけスクリプト」だけです。 そのためにわざわざ例外を投げてあげるよりは、もっとよくありそうな パターンのアプリケーションでの使い勝手をあげるほうがいいと思うのです。 また「絶対やだ」と言われた場合の手段としては以下のどれかを考えてます。 * 例外オブジェクトに Response オブジェクトを持たせる。 まだ 1.2 の感覚が残ってるもので、組み込みクラスにインスタンス変数を 持たせるのが「悪い」気がしていまいち乗り気ではない。 また、$! も使わないといけないし、そういうことをやってる例も かつて見たことがない。 * Net::HTTP に last_response を用意する。 もともとスレッドセーフではないしその点で問題はないのですが、 美しくないし、妙なエラーの温床になる可能性が高そう。 -- ここらへんの仕様の不備に関しては ひとえに ぼく自身の HTTP に対する踈さ (RFC は読みましたが)のせいです。今頃になって、最初から http-access (と、もっと HTTP に触れている人)に任せておけばよかったと後悔してます。 しかし、もう作ってしまったものは取り消せないので、あとはなんとか http.rb をまともに使えるようにメンテし続けるのがせめてもの責任だと 思っています。 ------------------------------------------------------------------- あおきみねろう