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.
OK, so apparently this has been answered on StackOverflow:
···
On Tue, Dec 4, 2012 at 5:01 PM, Eric Christopherson <echristopherson@gmail.com> wrote:
On Tue, Dec 4, 2012 at 12:13 PM, Kai König <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.