2012-11-06 157 views
2

可能重複:
What does @@variable mean in Ruby?差「@」和紅寶石雙「@」

有什麼區別時,我聲明瞭一個對象,具有雙「@ '

@@lexicon = Lexicon.new() 

並在Ruby中用單個'@'聲明對象?

@lexicon = Lexicon.new() 
+3

我不明白爲什麼這個問題是downvoted。這是一個完全合法的問題。 –

+0

我也沒有:(所有的人都不是紅寶石天才像他們一樣投了票。如果這個網站不適合學習者,那麼他們不應該讓我們註冊,除非我們有10年的編程經驗 – Yasin

+0

@RyanBigg:如果你把鼠標懸停在downvote arrow你會得到一個工具提示,其中列出了一些downvoting可能的合法理由,其中一個是「這個問題沒有顯示任何研究工作」,這個問題沒有:即使是最基本的初學者也回答了這個問題Ruby教程,它可以通過3秒的Google搜索得到平淡的回答,第一個結果是在SO上重複的。代碼片段違反基本Ruby編碼風格的事實進一步加強了OP沒有提供的外觀*任何*努力自己回答這個問題。 –

回答

6

區別在於第一個是類變量,第二個是實例變量。

實例變量僅對可用,該實例爲對象的實例。即

class Yasin 
    def foo=(value) 
    @foo = value 
    end 

    def foo 
    @foo 
    end 
end 

yasin = Yasin.new 
yasin.foo=1 
yasin.foo #=> 1 
yasin_2 = Yasin.new 
yasin_2.foo #> nil 

類變量是可用於類的所有實例(和子類,這個),其中定義了類變量。

class Yasin 
    def foo=(value) 
    @@foo = value 
    end 

    def foo 
    @@foo 
    end 
end 

yasin = Yasin.new 
yasin.foo=1 
yasin.foo #=> 1 
yasin_2 = Yasin.new 
yasin_2.foo #=> 1 
+0

你能否詳細說明一下例子?據我所知,它們都是Lexicon類的對象嗎? – Yasin

+1

你原來的問題是「有什麼區別?」。我解釋了不同之處。 –

+0

謝謝解釋 – Yasin