errors/name_error/names_parens.rb

tests/_examples/errors/name_error/names_parens.rb in the metorex repository.

def report
  yield
rescue NameError => error
  p error.name
end

report { doesnt_exist }
report { DoesntExist }
report { Object::DoesntExist }

ivar_name = "invalid_ivar_name"
report { Object.new.instance_variable_get(ivar_name) }

cvar_name = "invalid_cvar_name"
report { Object.class_variable_get(cvar_name) }

class Counter
  @@total = 7

  def self.total
    @@total
  end

  def self.missing
    @@never_set
  end
end

class Subcounter < Counter
end

puts(Counter.total)
puts(Subcounter.total)

begin
  Counter.missing
rescue NameError => error
  puts(error.message)
  p error.name
end

Output:

:doesnt_exist
:DoesntExist
:DoesntExist
"invalid_ivar_name"
"invalid_cvar_name"
7
7
uninitialized class variable @@never_set in Counter
:@@never_set