有没有办法在类方法中获取我们为特定类创建的实例的名称?
这就是我想要做的:
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它,但它给出了整个对象,而不是实例名称.
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.
| 归档时间: |
|
| 查看次数: |
2763 次 |
| 最近记录: |