在下面的代碼片段,這些類變量嗎?
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
EDITED
@suvankar,感謝回答。第二個片段是一個錯字,我編輯它以包含「自我」。我其實並不完全確定在第一個片段中,variable2是一個類變量。例如,如果我加載第一個片段到IRB,然後鍵入:
>> MyClass.class_variables
=> [@@variable1]
>> MyClass.instance_variables
=> [@variable2]
所以它看起來像變量1是一個類變量(毫不奇怪)。但是variable2是類MyClass的一個實例變量。
在片段1,你只有一個'@''中@ variable2',而在irb輸出中,在@@ variable2中有兩個'@@'。這是你的意圖嗎? –
嘿,彼得,是的,這是故意的。原因是@ variable2在「class << self」之內,所以它不僅僅是一個普通的舊實例變量。我認爲它被稱爲類實例變量,但這就是爲什麼我要在這裏弄清楚。 – User314159
當你的代碼有'@ variable2'時,irb會顯示「@@ variable2」對我來說沒有任何意義。你可以仔細檢查? –