Ruby:为什么未声明的实例变量返回nil

时间:2016-06-10 16:59:29

标签: ruby

鉴于以下课程:

class Something
  def initialize
    @test = "test"
  end
end

为什么ruby在调用未声明的实例变量时返回nil?

thingy = Something.new
thingy.instance_variable_get(:@var)  # nil
thingy.instance_variable_get(:@test) # "test"

与某些错误消息相反,表明实例中缺少该变量。我希望得到的答案是解释ruby以这种方式实现实例变量的原因。

2 个答案:

答案 0 :(得分:2)

它只是在Ruby中实现实例变量的方式。全局变量也是如此。如果将-w参数传递给ruby,也可以看到有关此类事情的警告。

✗ irb -w
2.3.1 :001 > @a
(irb):1: warning: instance variable @a not initialized
=> nil 

答案 1 :(得分:0)

因为允许对象具有空值,而不是抛出错误。例如用户,必须有姓名和地址,但电子邮件地址是可选的,在继续之前可以进行nil检查。

if customer1.name == nil #personalized error code here
if customer1.email == nil customer1.email = "not given"