errors/rescue_handler_shapes.rb
tests/_examples/errors/rescue_handler_shapes.rb in the metorex repository.
handled = [ArgumentError, TypeError]
puts((begin
raise(TypeError, "wrong")
rescue RuntimeError, *handled
:caught
end).to_s)
chooser = Class.new
def chooser.===(error)
error.message == "mine"
end
puts((begin
raise("mine")
rescue chooser
:by_case_equality
rescue RuntimeError
:by_class
end).to_s)
not_a_class = 42
begin
begin
raise("stopped")
rescue not_a_class
:never
end
rescue TypeError => error
puts(error.message)
end
class Holder
attr_accessor :captured
end
held = Holder.new
begin
raise("held")
rescue RuntimeError => held.captured
end
puts(held.captured.message)
begin
raise("global")
rescue RuntimeError => $captured
end
puts($captured.message)
first, second = raise rescue [1, 2]
puts([first, second].inspect)
["begin\n 1\nelse\n 2\nend", "1.+(1 rescue 1)", "a = 1 rescue RuntimeError 2"].each do |source|
begin
eval(source)
puts("no error")
rescue SyntaxError
puts("SyntaxError")
end
end
Output:
caught
by_case_equality
class or module required for rescue clause
held
global
[1, 2]
SyntaxError
SyntaxError
SyntaxError