我一直在玩 Ruby,主要是在顶层,我通常编写如下代码:
@x = 'foo'
def show_var
puts @x
end
show_var # => foo
根据此示例的工作方式,我认为实例变量对类和对象都可用。
今天我遇到了这个,看来我对实例变量的理解是不正确的:
class Test
@x = "foo" #you would need to define this inside 'initialize' for this to be available to show_var
def show_var
puts @x
end
end
Test.new.show_var # => nil
看起来第二个示例是实例变量的工作方式。如果在 Class 内部定义了一个实例变量,那么它只存在于该范围内,对于实例方法不存在。
那么我的问题是......为什么当变量@x 不应该存在于实例方法的范围内时,第一种情况会输出'foo'?另外,在要用于顶级方法的顶级类中定义变量的正确方法是什么?