考虑一下
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
Run Code Online (Sandbox Code Playgroud)
delete_var和delete_var_2有什么区别?
设置变量以nil保留作为容器的变量,但将包含的值更改为nil.
删除变量,然后将其删除.
在实例变量的情况下,它没有太大变化,至少在您的示例中.
原因是访问未定义的@instance变量将返回nil,因为这是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 >
Run Code Online (Sandbox Code Playgroud)
但是,这种相似性仅限于读取操作的结果.实际上,删除变量与将其设置为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 >
Run Code Online (Sandbox Code Playgroud)