gpt4 book ai didi

ruby - 获取实例名称

转载 作者:数据小太阳 更新时间:2023-10-29 07:46:58 26 4
gpt4 key购买 nike

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

这就是我想要做的:

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

在模块的倒数第三行,我尝试将对象的值存储到以实例名称作为键的新散列中。

这样的事情有可能吗?

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

最佳答案

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

id="Hello, World".object_id    => 82609910
ObjectSpace._id2ref(id) => "Hello, World"
"Hello, Ruby".object_id => 82721540

值得一提的是,对象 id,虽然对象在其整个生命周期中是常量,但在程序运行之间几乎永远不会是常量,具有完全相同数据的不同对象将具有不同的 ID:

"Hi".object_id                 => 82719050
"Hi".object_id => 82715090

对象 ID 也依赖于运行和操作系统等。切勿将对象 ID 硬编码到源代码中,仅使用通过 object_id 获得的 ID。

关于ruby - 获取实例名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8574060/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com