2013-08-04 58 views
0

在下面的代碼片段,這些類變量嗎?

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的一個實例變量。

+0

在片段1,你只有一個'@''中@ variable2',而在irb輸出中,在@@ variable2中有兩個'@@'。這是你的意圖嗎? –

+0

嘿,彼得,是的,這是故意的。原因是@ variable2在「class << self」之內,所以它不僅僅是一個普通的舊實例變量。我認爲它被稱爲類實例變量,但這就是爲什麼我要在這裏弄清楚。 – User314159

+0

當你的代碼有'@ variable2'時,irb會顯示「@@ variable2」對我來說沒有任何意義。你可以仔細檢查? –

回答

1

一個類的方法你是正確的,@@variable1是一個類變量,@variable2是類的一個實例變量。這兩個片段並不相同,因爲@@variable2(僅在片段二中定義)也是一個類變量。

(注:我假設你的IRB輸出有一個錯字,它應該已經包括@variable2,只調用MyClass.my_method後)。

+0

你說得對。 Variable2是一個錯字。我現在改了它。謝謝! – User314159

0

回答到的第一個問題: 是,變量1和變量2 類變量

第二個問題: 以上兩段不一樣。

說明:

在第一片斷'my_method'類方法和 在第二片斷'my_method'實例方法

下面的代碼片斷類似於第一個片段,其中my_methodMyClass

class MyClass 
    @@variable1 = 'foo' 

    def self.my_method 
     @@variable2 = 'bar' 
    end 
end 
+0

感謝您回答suvankar,但請查看我的最新評論編輯。 – User314159