From: Shin-ichiro HARA Date: 2001-07-25T19:42:25+09:00 Subject: [ruby-dev:14076] Re: Exception in coerce 原です。 >まつもと ゆきひろです >| Vect.new(1, 2) + 0 >| >|としてしまうと、その時出てくるメッセージが >| >| test.rb:2:in `coerce': failed to convert Vect into Float (TypeError) >| >|となるので、なんでここで Float が出てくるのか分からなくて >|困るのではないか、ということです。 > >分からないでもないですが、 > > test.rb:2:in `+': undefined method `coerce' for # (NameError) > >とどっちがマシかと言われると自信ないですね。 あれ、このメッセージだと Vect#coerce を呼ぼうとして失敗している ように見えますね。Vect.new(1, 2) + 0 をしても、Vect#coerce が呼 ばれる機会はないはずです。先のコードで出るべきエラーは、 Numeric#coerce の TypeError だというのが私の主張です。 >本当に親切なのはどうすることでしょう。 >また誰が親切になるべきでしょう。 律儀なライブラリ作者だったら Vect#+ の定義で、引数が Numeric だったら即座に TypeError を発生させ、さらに else 節の coerce で発生した例外も TypeError に変換するように書くんじゃないかな。