On Tue, Dec 4, 2012 at 12:13 PM, Kai Knig <kai / kairichardkoenig.de> wrote:
> Can somebody tell why this happens ?
>
>
> x = StandardError.new(:hello)
> y = StandardError.new(:hello)
> puts x == y # => true
> puts x === y # => true
>
> begin
>   raise x
> rescue x
>   puts "ok" # gets printed
> end
>
> begin
>   raise x
> rescue y
>   puts "ok" # doesn't get printed
> end
>

That is strange. According to the Pickaxe[1] (the online one at least;
I don't have my 1.9 copy handy) the exception matching is supposed to
be done with kind_of?; and the source code[2] seems to bear that out.
Clearly StandardError.new(:hello).kind_of?(StandardError.new(:hello))
is not true; it raises a TypeError because the argument isn't a class
or module.

[1] http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_exceptions.html
[2] http://rxr.whitequark.org/mri/source/eval.c#714