introspection/remove_instance_variable_no_parens.rb
tests/_examples/introspection/remove_instance_variable_no_parens.rb in the metorex repository.
class Greeter
def initialize
@greeting = "hello"
@name = "world"
end
end
greeter = Greeter.new
puts greeter.instance_variables.inspect
removed = greeter.remove_instance_variable :@greeting
puts removed.inspect
puts greeter.instance_variables.inspect
puts greeter.instance_variable_defined? :@greeting
removed_name = greeter.remove_instance_variable "@name"
puts removed_name.inspect
puts greeter.instance_variables.inspect
begin
greeter.remove_instance_variable :@unknown
rescue NameError => error
puts "#{error.class}: #{error.message}"
end
begin
greeter.remove_instance_variable :"@0"
rescue NameError => error
puts "#{error.class}: #{error.message}"
end
begin
greeter.remove_instance_variable Object.new
rescue TypeError => error
puts error.class
end
class Name
def to_str
"@greeting"
end
end
reborn = Greeter.new
reborn_greeting = reborn.remove_instance_variable Name.new
puts reborn_greeting.inspect
frozen = Greeter.new
frozen.freeze
begin
frozen.remove_instance_variable :@greeting
rescue FrozenError => error
puts error.class
end
begin
nil.remove_instance_variable :@anything
rescue FrozenError => error
puts error.class
end
begin
nil.remove_instance_variable :not_a_variable
rescue NameError => error
puts error.class
end
puts Kernel.public_instance_methods(false).include? :remove_instance_variable
Output:
[:@greeting, :@name]
"hello"
[:@name]
false
"world"
[]
NameError: instance variable @unknown not defined
NameError: `@0' is not allowed as an instance variable name
TypeError
"hello"
FrozenError
FrozenError
NameError
true