errors/builtin_error_ancestry_no_parens.rb

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

# Ruby defines no ValueError, and every built-in error class reaches the
# StandardError a program names through its ancestors, which is how a rescue
# of StandardError places it.
p defined?(ValueError)
errors = [ZeroDivisionError, TypeError, ArgumentError, KeyError, StopIteration, FrozenError, IOError, EOFError, Errno::ENOENT]
p errors.all? { |error| error.ancestors.include?(StandardError) }
caught = errors.map do |error|
  raise error
rescue StandardError => raised
  raised.class
end
p caught == errors
begin
  raise NotImplementedError
rescue StandardError
  p :not_reached
rescue ScriptError => raised
  p raised.class
end

Output:

nil
true
true
NotImplementedError