我进行了一个实验,试图了解单例是如何工作的。
我不明白为什么我们在类变量前面加上@@ 而不是@?如下所述,如果变量是与类定义内联创建的,则 self 定义为 Test,并且该变量是类变量对吗?然后我们可以在单例类定义中使用 attr_accessor 来访问它。initialize 中的@var 似乎有所不同,因为 self 在初始化时在上下文中设置为 t ,所以 var 在该上下文中属于 t ?
这一切都非常令人困惑,任何帮助将不胜感激。
class Test
@var = 99
attr_accessor :var
def initialize
@var = "Whoop" #if this is commented, pri doesn't print anything.
end
def pri
puts @var
end
class << self
attr_accessor :var
end
end
t = Test.new
puts Test.var # Outputs 99
Test.var = 5
puts Test.var # Outputs 5
puts t.pri # Outputs Whoop