2012-11-06 71 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