2012-06-21 7 views
5

、それは行が含まれています@@はRubyでどういう意味ですか?私はRailsのソースコードをブラウズしていたよう

@@autoloads = {} 

@@はRubyで何を意味するのでしょうか?

+0

ただ追加したい、一般的なコンセンサスは、クラスのインスタンス変数をクラスの変数より優先させます。 http://thinkrelevance.com/blog/articles/2006/11/16/use-class-instance-variables-not-class-variables – Dty

+1

Symbolhoundは、このようなものを検索するのに便利です。 –

答えて

2

これは、インスタンスプロパティー(そのクラスのインスタンス化されたオブジェクトごとに存在するプロパティー)ではなく、クラスプロパティー(クラスに名前を付けたプロパティー)にアクセスすることを意味します。

この例では、@@autoloadsはプログラムの長さの間持続します。

class TestObj 
    @@prop = 0 
    def get_prop 
     @@prop 
    end 

    def increment_prop 
    @@prop += 1 
    end 
end 

a = TestObj.new 
b = TestObj.new 

a.increment_prop 

puts b.get_prop # 1 

CodePad

+0

ありがとう - 私は@がインスタンス変数であることを理解しましたが、Rubyではまだかなり新しいです。 – sdasdadas

+0

注意すべき点は、親クラスのクラス変数が子クラスによって継承されないことです。私はそれで少しだけ新しいRubyistsをたくさん知っていました。 – x1a4

+0

クラス変数は継承されますが( '@@ ...')、クラス*インスタンス変数( '@ ...')は階層に関係なく各クラスに固有です。インスタンス変数では起こりえないクラス変数についても、「初期化されていない」警告が表示されます。 – tadman

1

は@@クラス変数を識別する。

+0

Googleはこの回答を少し難しくしました。 – sdasdadas

1

@@は、クラス変数を示すだけです。

class変数は、クラスのすべてのインスタンス間で共有される変数です。つまり、このクラスからインスタンス化されたすべてのオブジェクトに対して1つの変数値しか存在しません。

クラス変数の考え方の別の考え方は、単一クラスのコンテキスト内のグローバル変数として考えられます。

関連する問題