0

例如:

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?

4

2 回答 2

5

如果 var2 不是布尔值,您可以这样做。

class MyClass
  class << self
    attr_writer :var2
  end

  def self.var2
    @@var2 ||= 'my init value'
  end
end
于 2012-11-02T06:30:18.843 回答
1

首先,这是类变量和单例类的混淆。当你这样做class << self并不意味着你现在可以得到@@var1as 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
于 2012-11-02T06:44:55.940 回答