2012-06-09 107 views
0

爲什麼ruby中的類變量的行爲不像靜態變量,我如何通過執行Mytest.value而不是MyTest.new.value來訪問它?在ruby中訪問類變量

class MyTest 
    @@value=0 

    def value 
    @@value 
    end 
end 

puts MyTest.new.value 
+2

最好不要使用類變量。我已經完全從我的工具包中刪除它們。相反,在你的類中使用實例變量,就像Erik展示的那樣。如果您的實例也需要訪問它們,請爲它們提供委派給該類的方法。 –

回答

6

你想要的東西像

class MyTest 
    @@value = 0 
    def self.value 
    @@value 
    end 
end 

self使得一個類的方法,它的類直接調用。

2

[編輯]讀評論知道爲什麼不這樣做。相反,如果你真的需要以這種方式訪問​​變量,我建議一個簡單的模塊。否則,就像Joshua Cheek在原始帖子中評論的那樣,你應該爲你的類使用實例變量並且使用訪問器。

+1

雖然這種行爲類似,但類對象的類變量和實例變量之間存在重要的區別(最重要的是它們如何被繼承處理)。 另外,'class << self'是過時的符號。最近的Ruby版本具有'singleton_class'和'define_singleton_method'方法,這些方法更易於閱讀。 – Max

+0

你是對的,做這件事的正確方法很好,你剛剛發佈的答案。 –

+0

術語「靜態」在Ruby中並不適用。 –