0

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

预计会出现上述错误。但是在下面的代码中,我已将类变量分配@@X10. 但是在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]
4

1 回答 1

2

由于一切都是对象,并且在 Ruby 中不需要显式变量声明,因此您可以编写代码

p @X.object_id

默默地引入了一个实例变量@X( @X.nil? == true)。您可以在以下位置看到这种魔力irb

~ irb
> p @x.object_id
# 8
# ⇒ 8
于 2013-03-03T09:22:15.000 回答