rescue/modifier/fallbacks.rb
tests/_examples/rescue/modifier/fallbacks.rb in the metorex repository.
# `expr rescue fallback` answers the fallback when expr raises a
# StandardError. On the right of an assignment the modifier binds to the
# value, so the fallback is what gets assigned.
def risky
raise "boom"
end
quiet = risky rescue nil
puts quiet.inspect
named = risky rescue "caught"
puts named
untouched = 1 rescue "never"
puts untouched.to_s
parenthesized = (risky rescue :inline)
puts parenthesized.inspect
# A rescue clause on its own line still opens a block.
begin
risky
rescue => error
puts error.message
end
# Only StandardError is caught, so a raised Exception passes through.
def fatal
raise Exception, "fatal"
end
begin
value = fatal rescue "swallowed"
puts value
rescue Exception => error
puts "propagated: #{error.message}"
end
Output:
nil
caught
1
:inline
boom
propagated: fatal