methods/yield_in_method_clauses_no_parens.rb

tests/_examples/methods/yield_in_method_clauses_no_parens.rb in the metorex repository.

# A method's own rescue, else and ensure clauses belong to its body, so
# `yield` there hands values to the block the method was called with.
def recovering
  raise ArgumentError, "first try"
rescue ArgumentError => error
  yield error.message
end

def finishing
  :body
ensure
  yield :ensure
end

def succeeding
  :body
rescue
  :never
else
  yield :else
end

p recovering { |message| "recovered from #{message}" }
p finishing { |where| puts "ran in #{where}" }
p succeeding { |where| "answered from #{where}" }

Output:

"recovered from first try"
ran in ensure
:body
"answered from else"