From: KOSAKI Motohiro Date: 2012-06-24T19:55:18+09:00 Subject: [ruby-dev:45798] Re: [ruby-trunk - Feature #6639][Open] ArgumentError から ArityError を分離 > =begin > ArgumentError と TypeError の違いがわかりにくい、という話がありました( #6423 )。 > 違いがわかりにくい原因として、メソッドやブロックの呼び出し時に、次のような感じで、 > エラーの発生する場所が混在しているため、という理由が考えられます。 > (1) 実引数の個数が正しいかをチェック → ダメなら ArgumentError > (2) 実引数の型(期待するメソッドがあるか)をチェック → ダメなら TypeError > (3) 実引数の値をチェック → ダメなら ArgumentError > ArgumentError のサブクラスとして ArityError を作り (1) のエラーを ArityError に > すれば、各エラーの意味が明確化するのではないかと思います。 > =end ArityErrorを導入する事自体は+1。でも(2)に関してもNameErrorじゃない理由はなんじゃい(型はチェックしてなくてメソッドがあるかどうかしか見てない場合がほとんど)とか(3)に関してはArgumentErrorとRangeErrorの違いはなんじゃいとか色々と疑問があり、ここだけ切り出して議論するのが適切なのかやや自信がないところではあります