在类变量中保存实例列表

时间:2015-06-02 15:28:15

标签: ruby

我想将新创建的Person实例存储在类变量objects中,但不确定如何从构造函数中引用当前实例。

class Person
  @@objects = {}

  def initialize(key)
    @@objects[key] = something
  end

理想情况下,结果是能够通过Person

访问Person.objects个对象的字典

1 个答案:

答案 0 :(得分:1)

简单地说,在构造函数中,self将引用当前实例。

class Person
  @@objects = {}

  def initialize(key)
    @@objects[key] = self
    puts self # it will print the id of the current instance
  end
end

同样,如果你在类方法中编写self,它将引用该类。

但是从您的问题来看,您似乎正在执行类似Person.objects的操作,但它无效,并将输出以下行:

NoMethodError: undefined method `objects' for Person:Class

因此,您需要为其编写方法,让外界访问objects

def self.objects
  @@objects
end

嗯,还有其他方法可以访问类变量,请看一下question