以下のスニペットでは、
class MyClass
class << self
@@variable1 = 'foo'
def my_method
@variable2 = 'bar'
end
end
end
とクラス変数@@variable1
は? @variable2
別の言い方をすれば、上記のスニペットは次のスニペットと同等です。
class MyClass
@@variable1 = 'foo'
def self.my_method
@@variable2 = 'bar'
end
end
編集済み
@suvankar、答えてくれてありがとう。2 番目のスニペットはタイプミスだったので、'self' を含めるように編集しました。実際、最初のスニペットで variable2 がクラス変数であるかどうかは完全にはわかりません。たとえば、最初のスニペットを irb にロードして、次のように入力するとします。
>> MyClass.class_variables
=> [@@variable1]
>> MyClass.instance_variables
=> [@variable2]
そのため、variable1 はクラス変数のようです (驚くことではありません)。ただし、variable2 はクラス MyClass のインスタンス変数です。