如何在Ruby中初始化类变量?

时间:2012-11-02 05:32:03

标签: ruby

例如:

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?

2 个答案:

答案 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