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て得ることができるという意味ではありません。この例で説明します@@var1self.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 に答える