例如:
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?
如果Var2不是布尔人,则可以这样做。
class MyClass
class << self
attr_writer :var2
end
def self.var2
@@var2 ||= 'my init value'
end
end
首先,这是类变量和单胎类中的混乱。当您进行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在整个班级范围中可用,但与singleton变量有所不同。
类变量在类的所有对象之间共享,并且类方法也可以访问。因此,您可以在发现它可以接受的任何地方初始化它。最简单,最容易理解的是班级范围。
class MyClass
@@var1 = '123456'
...
end