Rails のソース コードを参照していると、次の行が含まれています。
@@autoloads = {}
@@
Ruby での意味は?
これは、インスタンス プロパティ (そのクラスからインスタンス化されたオブジェクトごとに存在するプロパティ) ではなく、クラス プロパティ (クラスに名前空間が割り当てられたプロパティ) にアクセスすることを意味します。
あなたの例では@@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
@@ は、クラス変数を示すだけです。
クラス変数は、クラスのすべてのインスタンス間で共有される変数です。これは、このクラスからインスタンス化されたすべてのオブジェクトに対して、1 つの変数値のみが存在することを意味します。
クラス変数のもう 1 つの考え方は、単一のクラスのコンテキスト内のグローバル変数です。
@@ はクラス変数を識別します。