2012-06-21 64 views
5

當我翻閱Rails的源代碼,它包含行:Ruby中的@@意味着什麼?

@@autoloads = {} 

是什麼意思@@在Ruby中?

+0

只是想添加,普遍的共識是贊成類變量實例類變量。 http://hinkrelevance.com/blog/articles/2006/11/16/use-class-instance-variables-not-class-variables – Dty

+1

Symbolhound對搜索這樣的東西很有用。 –

回答

2

它意味着訪問一個類屬性(一個屬性命名空間爲該類),而不是一個實例(對於該類中每個實例化對象都存在的屬性)。

在你的例子中,@@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 

CodePad

+0

謝謝 - 我明白@是實例變量,但對Ruby來說還是很新的。 – sdasdadas

+0

需要注意的一件事是,父類中的類變量不是由子類繼承的。我認識了很多新的Ruby專家。 – x1a4

+0

類變量是繼承的('@@ ...'),但類*實例*變量('@ ...')對於每個類都是唯一的,無論層次結構如何。您還會在實例變量永遠不會發生的類變量上發出「未初始化」警告。 – tadman

1

@@標識類變量。

+0

謝謝,谷歌找到這個答案有點困難。 – sdasdadas

1

@@不過是表示類變量。

類變量是在類的所有實例之間共享的變量。這意味着對於從此類實例化的所有對象,只有一個變量值存在。

思考類變量的另一種思維方式是在單個類的上下文中作爲全局變量。