什么可以';我从ruby中的对象访问类变量吗?

什么可以';我从ruby中的对象访问类变量吗?,ruby,class-variables,Ruby,Class Variables,我不想从外部(通过attr_访问器)设置类的类变量,然后从它的一个对象内部访问它。我正在使用ruby 1.9.2。这是我的代码: class Service def initialize(id) @my_id = id end class << self attr_accessor :shared_id end def system_id @my_id + @@shared_id end end 类服务 def初始化(id)

我不想从外部(通过attr_访问器)设置类的类变量,然后从它的一个对象内部访问它。我正在使用ruby 1.9.2。这是我的代码:

class Service
  def initialize(id)
    @my_id = id   
  end

  class << self
    attr_accessor :shared_id
  end

  def system_id
    @my_id + @@shared_id
  end
end
类服务
def初始化(id)
@我的id=id
终止

attr\u访问器
创建操作实例变量的方法-它不创建实例或类变量。要创建类变量,必须将其设置为:

@@shared_id = something
没有帮助器方法为类变量生成访问器,所以您必须自己编写它们

然而,类变量,由于其奇怪的查找规则,很少被使用——甚至被避免。而是使用类级别的实例变量

class Service
  @shared_id = thing

  class << self
    attr_accessor :shared_id
  end

  def system_id
     # use self.class.shared_id; you could add a shared_id helper to generate it, too.
  end
end
类服务
@共享的东西

attr\u访问器
创建操作实例变量的方法-它不创建实例或类变量。要创建类变量,必须将其设置为:

@@shared_id = something
没有帮助器方法为类变量生成访问器,所以您必须自己编写它们

然而,类变量,由于其奇怪的查找规则,很少被使用——甚至被避免。而是使用类级别的实例变量

class Service
  @shared_id = thing

  class << self
    attr_accessor :shared_id
  end

  def system_id
     # use self.class.shared_id; you could add a shared_id helper to generate it, too.
  end
end
类服务
@共享的东西

class记住
@@class\u var
对所有类都是全局的

记住
@@class\u var
对所有类都是全局的

怎么样?

怎么样?

你是说所有子类都是全局的吗?如果不是的话,我不明白这一点:SDid你是说所有子类都是全局的?如果没有,我不明白这一点:这是可行的,但我想知道为什么我的代码没有。但是,我发现您发布的链接非常有用,因为有几个注释确实解释了类_可继承_访问器实际上不使用全局变量。这是可行的,但我想了解为什么我的代码没有。但是,我发现您发布的链接非常有用,因为有几个注释确实解释了类可继承的访问器实际上不使用全局变量。简而言之,类实例级别的attr\u访问器不使用全局变量。它使用该类内部的实例变量。简言之,类实例级别的attr_访问器不使用全局变量。它在该类中使用一个实例变量。