以下代码在类方法中设置了
C
类的类变量,并显示它可以从实例方法中访问:class C
def self.set_a
@@a = 1
end
def get_a
@@a
end
end
C.set_a
C.new.get_a #=> 1
如果我在类方法 set_a
中将@@a
替换为@a
,那么它会创建一个类实例变量而不是一个类变量,我还能从实例方法 get_a
中访问它吗?
def get_a; @a; end
,因为c = C.new; c.get_a
会返回c
实例变量@a
的值。因此,在get_a
中需要使用两个方法来获取类实例变量@a
的值。第一个方法是获取c
的类;第二个方法在c
的类上调用以获取变量的值。 - Cary SwovelandC
和C.new
是两个完全不同的对象,彼此之间没有任何关联。实例变量的整个意义在于一个对象不能访问另一个对象的实例变量,除非该对象以某种方式明确地将其公开。 - Jörg W Mittag