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

Yas*_*sin 2 ruby oop class object

可能重复:
@@ variable在Ruby中意味着什么?

使用double'@'声明对象时有什么区别

@@lexicon = Lexicon.new()
Run Code Online (Sandbox Code Playgroud)

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

@lexicon = Lexicon.new()
Run Code Online (Sandbox Code Playgroud)

Rya*_*igg 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
Run Code Online (Sandbox Code Playgroud)

类变量可用于定义类变量的类(和子类,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
Run Code Online (Sandbox Code Playgroud)