1

周りを見回すと、クラス変数とクラスインスタンス変数の比較がいくつか見つかります.クラス変数について私が聞いた中で最高のものは「それはあなたが望むものかもしれません」ですが、それが彼らが望むものであると誰かが言うのを聞いたことがありません. 、または継承ツリー全体で変数を共有する状況がより役立つ場合があります。

では、実際には、クラス インスタンス変数よりもクラス変数の方が適しているのはどのような場合でしょうか。

4

2 に答える 2

1

別の例(すべてのオブジェクトに一意の名前が必要)

class Foobar
    @@uniqueId = 0        
    def initialize
       @@uniqueId += 1
    end        
    def unique_name
       "Foobar_" + @@uniqueId.to_s
    end
end
a = Foobar.new
puts a.unique_name

a = Foobar.new
puts a.unique_name

これは出力します

Foobar_1

Foobar_2

編集:シングルトンパターンは静的変数リンクの良い例でもあります

于 2012-11-02T09:06:32.527 に答える
0

最も簡単な例は、クラス変数を使用して、そのクラスの概要状態またはすべてのインスタンスの共有状態を格納することです。

class Foobar
  @@total = 0

  def initialize
    @@total += 1
  end

  class << self
    def all
      @@total
    end
  end
end

5.times { Foobar.new }
Foobar.all #=> 5

したがって、ここで@@totalは、合計として作成されたインスタンスの数を示します。

Rails のActiveRecord#FinderMethods#allは、単に配列のサイズを返します。ただし、クラスのすべてのインスタンスが配列にラップされていない場合は、クラス変数を使用して「すべて」を返すことも解決策です。

于 2012-11-02T08:57:45.260 に答える