introspection/instance_variable_set_frozen_no_parens.rb
tests/_examples/introspection/instance_variable_set_frozen_no_parens.rb in the metorex repository.
def try_set(obj, label)
begin
obj.instance_variable_set :@spec, "value"
puts "#{label}: no error"
rescue FrozenError => e
puts "#{label}: #{e.class}"
end
end
try_set true, "true"
try_set false, "false"
try_set nil, "nil"
try_set 42, "integer"
try_set :sym, "symbol"
class Foo; end
f = Foo.new
f.instance_variable_set :@x, 99
puts "instance: #{f.instance_variable_get :@x}"
f.freeze
begin
f.instance_variable_set :@x, 100
puts "frozen instance: no error"
rescue FrozenError
puts "frozen instance: FrozenError"
end
begin
true.instance_variable_set :@bad, 1
rescue RuntimeError
puts "rescued via RuntimeError"
end
Output:
true: FrozenError
false: FrozenError
nil: FrozenError
integer: FrozenError
symbol: FrozenError
instance: 99
frozen instance: FrozenError
rescued via RuntimeError