我正在使用class
块内的本地,类变量和实例变量创建,如下所示。但是我找到了一些我自己无法解释的东西。我的混淆已发布在以下两个代码之间。
class Foo
def self.show
@@X = 10 if true
p "hi",@@X.object_id,x.object_id
end
end
#=> nil
Foo.show
#NameError: undefined local variable or method `x' for Foo:Class
# from (irb):4:in `show'
# from (irb):7
# from C:/Ruby193/bin/irb:12:in `<main>'
预计上述错误。但是在下面的代码中,我已将类变量@@X
分配给10
。但是在p
语句中我使用了实例变量@X
。为什么错误没有像上面的代码那样抛出?
class Foo
def self.show
@@X = 10 if true
p "hi",@X.object_id
end
end
#=> nil
Foo.show
"hi"
4
#=> ["hi", 4]
答案 0 :(得分:2)
由于everything is object并且Ruby中不需要显式变量声明,因此您需要编码
p @X.object_id
默默地引入了一个实例变量@X
(@X.nil? == true
)。你可以在irb
:
~ irb
> p @x.object_id
# 8
# ⇒ 8