Consider this
class SomeClass
attr_reader :var
def initialize
@var = 42
end
def delete_var
remove_instance_variable(:@var)
end
def delete_var_2
@var = nil
end
end
What is the difference between delete_var and delete_var_2?
Setting a variable to nil
preserves the variable, intended as a container, but changes the contained value to nil
.
Removing a variable, well, removes it.
In the case of instance variables it doesn't change much, at least in your example.
The reason is that accessing an undefined @instance
variable will return nil
, as that is the expected behavior of Ruby:
$ irb
2.1.0 :001 > var
NameError: undefined local variable or method `var' for main:Object
from (irb):1
from /Users/Tom/.rvm/rubies/ruby-2.1.0/bin/irb:11:in `<main>'
2.1.0 :002 > @var
=> nil
2.1.0 :003 >
However, this similarity is limited to the outcome of read operations. In fact, removing a variable is not the same thing as setting it to nil:
$ irb
2.1.0 :001 >
2.1.0 :002 > defined? @var
=> nil
2.1.0 :003 > @var = nil
=> nil
2.1.0 :004 > defined? @var
=> "instance-variable"
2.1.0 :005 >
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With