errors/kernel_raise_method.rb

tests/_examples/errors/kernel_raise_method.rb in the metorex repository.

begin
  raise "keyword form"
rescue RuntimeError => error
  puts error.message
end

class Thrower
  def throw_it
    send(:raise, ArgumentError, "through send")
  end
end

begin
  Thrower.new.throw_it
rescue ArgumentError => error
  puts "#{error.class}: #{error.message}"
end

raiser = Object.new
class << raiser
  public :raise
end

begin
  raiser.raise TypeError, "with a receiver"
rescue TypeError => error
  puts "#{error.class}: #{error.message}"
end

begin
  Kernel.raise IndexError, "on Kernel"
rescue IndexError => error
  puts "#{error.class}: #{error.message}"
end

begin
  Kernel.method(:raise).call KeyError, "through a Method object"
rescue KeyError => error
  puts "#{error.class}: #{error.message}"
end

puts Kernel.private_instance_methods(false).include?(:raise)

# A bare raise with nothing to re-raise makes a RuntimeError whose message is
# empty. The "unhandled exception" wording belongs to the uncaught report.
begin
  raise
rescue RuntimeError => error
  puts error.class.to_s
  puts error.message.inspect
end

Output:

keyword form
ArgumentError: through send
TypeError: with a receiver
IndexError: on Kernel
KeyError: through a Method object
true
RuntimeError
""