2

可能重复:
@@variable 在 Ruby 中是什么意思?

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

@@lexicon = Lexicon.new()

并在 Ruby 中用单个“@”声明对象?

@lexicon = Lexicon.new()
4

1 回答 1

6

区别在于第一个是类变量,第二个是实例变量。

实例变量仅可用于对象的该实例。IE

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
于 2012-11-06T09:54:24.550 回答