Hi,

(2010/03/03 20:18), Yusuke ENDOH wrote:
> 2010/3/3 Yukihiro Matsumoto <matz / ruby-lang.org>:
>> |Some methods of Ruby 1.9 expect integers/reals and call internally nurat_int_value/nurat_int_check. These functions raise an ArgumentError when the argument is not an Integer, instead of a TypeError.
>> |Unless there is objection, I will commit the following patch (and fix RubySpec):
> 
> Agreed.

I agree with marcandre too.

>> Go ahead.  I am thinking of making TypeError subclass of
>> ArgumentError, since every TypeError should occur in relation to any
>> argument.  How do you (guys) think?
> 
> 
> I really agree with your problem awareness.
> 
> Some TypeErrors seem to occur regardless of argument:
> 
>   0.dup                      #=> can't dup Fixnum (TypeError)
>   Class.allocate.superclass  #=> uninitialized class (TypeError)
>   class C
>     def _dump(x); 1; end
>   end
>   Marshal.dump(C.new)'       #=> _dump() must return string (TypeError)
> 
> We can change them to RuntimeError, etc, of course.
> 
> 
> However, I think we need more drastic restructuring of Exception
> classification.  Even currently, ArgumentError occurs in too many
> cases.  Rescue'ing ArgumentError is even harmful because it may
> hide unexpected ArgumentError.
> (http://d.hatena.ne.jp/ku-ma-me/20090423/p1)
> 
> And, I said in [ruby-core:28003] TypeError and NoMethodError
> should not be distinguished in some cases.  It means Exception
> does not make hierarchy.  Without multiple inheritance, it can be
> implemented by representing Exception as mix-in, I think.
> 
> So, why don't consider the design carefully towards 2.0?

But I fully agree with Yusuke;
This change will be a system wide change.
I think it won't be concluded before 1.9.2 release.
So applying it to trunk should be carefully.

-- 
NARUSE, Yui  <naruse / airemix.jp>