我正在使用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]