ruby - 在 Ruby 中用单 '@' 和双 '@' 声明对象的区别

标签 ruby oop class object

<分区>

Possible Duplicate:
What does @@variable mean in Ruby?

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

@@lexicon = Lexicon.new()

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

@lexicon = Lexicon.new()

最佳答案

不同的是,第一个是类变量,第二个是实例变量。

实例变量仅可用于对象的那个实例。即

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

关于ruby - 在 Ruby 中用单 '@' 和双 '@' 声明对象的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13248510/

相关文章:

java - 如何一次性为java中所有children(obj)的字段分配一个新值?

java - 如何检查子类的类型?

Ruby - 类方法中的引用子类

ruby-on-rails - ruby rails : Using shovel operator to update a string attribute on a model does not make the model dirty

javascript - 如何在 JavaScript 中访问父类(super class)的私有(private)成员?

ruby - 如何使用系统和反引号运行 Unix 命令?

php - 使用子接口(interface)作为新参数覆盖方法参数

c++ - 将 C++ 类转换为 C 结构(以及更多)

ruby - 在隐式接收器上调用 * 方法

ruby-on-rails - Rails 开发 Mac OS 或 Windows