例如:
class MyClass
@@var1 = '123456'
def self.var1
@@var1
end
class << self
attr_accessor :var2
def self.initialize
self.var2 = 7890
end
end
end
p MyClass.var1 # "123456"
p MyClass.var2 # nil
有没有办法初始化var2?
答案 0 :(得分:4)
如果var2不是布尔值,你可以这样做。
class MyClass
class << self
attr_writer :var2
end
def self.var2
@@var2 ||= 'my init value'
end
end
答案 1 :(得分:1)
首先,这里是类变量和单例类的混淆。当您执行class << self
时,并不意味着您现在可以@@var1
作为self.var1
。我通过这个例子说明了它
class MyClass
@@var1 = '123456'
class << self
attr_accessor :var1
def get_var1
@@var1
end
def set_var1
self.var1 = '654321'
end
end
end
MyClass.get_var1 #=> '123456'
MyClass.set_var1 #=> '654321'
MyClass.get_var1 #=> '123456'
正如您所看到的,@ var1在整个类范围内可用,但它与单例变量不同。
类变量在类的所有对象之间共享,并且类方法也可以访问它。因此,您可以在任何可以接受的地方对其进行初始化。最简单易懂的是在课堂范围内。
class MyClass
@@var1 = '123456'
...
end