在Ruby中使用单个'@'和double'@'声明对象之间的区别

时间:2012-11-06 09:53:56

标签: ruby oop class object

  

可能重复:
  What does @@variable mean in Ruby?

当我使用double' @'声明一个对象时有什么区别?

@@lexicon = Lexicon.new()

并使用单个' @'声明对象在Ruby?

@lexicon = Lexicon.new()

1 个答案:

答案 0 :(得分: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

类变量可用于类(和子类,iirc)的所有实例,其中定义了类变量。

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