This is because of how the ===
operator works on the class Class
The case
statement internally calls the ===
method on the object you are evaluating against. If you want to test for e
class, you just test against e
, not e.class
. That’s because e.class
would fall into the when Class
case, because, well, e.class is a Class.
rescue Exception => e
case e
when Errno::ECONNRESET
p 1
when Errno::ECONNRESET,Errno::ECONNABORTED,Errno::ETIMEDOUT
p 2
else
p 3
end
end
Yeah, Ruby can have weird semantics sometimes