From: Eric Christopherson Date: 2012-12-05T09:57:25+09:00 Subject: Re: Weird rescue On Tue, Dec 4, 2012 at 5:01 PM, Eric Christopherson wrote: > 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 > OK, so apparently this has been answered on StackOverflow: http://stackoverflow.com/questions/13709100/what-is-wrong-with-this-rescue-example