From: Eric Christopherson Date: 2012-12-05T08:01:32+09:00 Subject: Re: Weird rescue On Tue, Dec 4, 2012 at 12:13 PM, Kai König 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