From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?=) Date: 2010-04-13T14:56:59+09:00 Subject: [ruby-dev:40967] Re: [Bug #3137] complex.rb changes exceptions of Math けいじゅ@いしつかです. In the message: "[Bug #3137] complex.rb changes exceptions of Math", on Apr/12 23:01(JST) Yusuke Endoh writes: >遠藤です。 どもです. >[ruby-core:28204] にて Brian Ford が「complex を require すると >Math.atan(nil) で投げられる例外が変わる」という報告をしています。 > > > $ ./ruby -e 'p Math.atanh(nil)' > -e:1:in `atanh': can't convert nil into Float (TypeError) > from -e:1:in `
' > > $ ./ruby -rcomplex -e 'p Math.atanh(nil)' > /home/mame/work/ruby-trunk-local/lib/ruby/1.9.1/cmath.rb:196:in `atanh': undefined method `real?' for nil:NilClass (NoMethodError) > from -e:1:in `
' > > >Ruby レベルのライブラリは duck typing のためにむやみに型チェック >すべきでないとはいえ、CMath は組み込みの Math クラスの置き換えを >前提としているので、なるべく Math クラスの挙動を尊重した方がよい >と思いました。 うーん. そうですねぇ... ただ, Complex#atanh等で, > -e:1:in `atanh': can't convert nil into Float (TypeError) という例外はふさわしくない気もします. Complex#atanhの実装を知らないと わけの分からないエラーになっている気がしません? Math.log(-1) の Math::DomainError: Numerical argument is out of domain - "log" ような例外の方がふさわしいかと? >以下のパッチをコミットしてもいいでしょうか。 添付のパッチだと zが複素数の時は動作しません. 例外はMathとは変わりますが, それでよいなら, NoMethodErrorを捕捉してそ れなりの例外にして再raiseするようにします. __ ---------------------------------------------------->> 石塚 圭樹 <<--- ---------------------------------->> e-mail: keiju@ishitsuka.com <<---