errors/rescue_names_in_scope_no_parens.rb
tests/_examples/errors/rescue_names_in_scope_no_parens.rb in the metorex repository.
# The same as `rescue_names_in_scope.rb`, written without parentheses.
# A name in a rescue clause is read where it was written, so a method of a
# nested class reaches an exception class the enclosing module holds by its
# simple name.
module Store
class Missing < StandardError; end
class Shelf
def fetch(name)
raise Missing, "nothing named #{name}"
end
def fetch_or_default(name)
fetch(name)
rescue Missing => trouble
trouble.message
end
end
end
p Store::Shelf.new.fetch_or_default("tea")
# `__dir__` names the directory holding the file the code was written in,
# which is the same directory `__FILE__` sits in even inside a block.
here = -> { __dir__ }
p here.call == File.dirname(File.expand_path(__FILE__))
# A Regexp subclass carries the pattern it was built with and answers
# Regexp's methods through it.
class Loose < Regexp; end
loose = Loose.new "ab", Regexp::IGNORECASE
p loose.class
p loose.source
p loose.options
p loose.match?("AB")
Output:
"nothing named tea"
true
Loose
"ab"
1
true