获取实例名称

Gau*_*nda 3 ruby

有没有办法在类方法中获取我们为特定类创建的实例的名称?

这就是我想要做的:

module MyObjectStore
  values = {}
  temp=  {}
  define_method :add_check_attribute do |method,*args|
    if method.to_s =~ /=$/
      temp[method[0..-2]] = args[0]
    else
      instance_variable_get("@#{method}")
    end
  end
  define_method :method_missing do |method,*args|
    add_check_attribute(method,*args)
  end
  define_method :save do
    temp.each {|key,value| instance_variable_set("@#{key}",value)}
    values[self] = temp
    end
end

class C
  include MyObjectStore
end

a = C.new
a.id = 1
a.name = 'gaurav'
a.save
Run Code Online (Sandbox Code Playgroud)

在模块的倒数第三行,我试图将对象的值存储到以实例名称为键的新哈希中.

有可能吗?

我现在正在使用self它,但它给出了整个对象,而不是实例名称.

Lin*_*ios 6

Ruby对象除了内存地址外没有其他名称.但是,每个对象都具有object_id始终唯一的对象.使用ObjectSpace._id2ref,实例和ID是可以互换的.这是一个例子:

id="Hello, World".object_id    => 82609910
ObjectSpace._id2ref(id)        => "Hello, World"
"Hello, Ruby".object_id        => 82721540
Run Code Online (Sandbox Code Playgroud)

值得一提的是,对象id虽然对于一个对象在其生命周期内是常量,但在程序运行之间几乎不会保持不变,并且具有完全相同数据的不同对象将具有不同的ID:

"Hi".object_id                 => 82719050
"Hi".object_id                 => 82715090
Run Code Online (Sandbox Code Playgroud)

对象ID也依赖于运行并依赖于操作系统等.永远不要将对象ID硬编码到源代码中,只使用您通过的ID object_id.