errors/rescue_handler_shapes_no_parens.rb

tests/_examples/errors/rescue_handler_shapes_no_parens.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