使用Ruby版本2.1.2
class A
def foo
ObjectSpace::trace_object_allocations do
obj = Object.new
p "#{ObjectSpace::allocation_class_path(obj)}"
end
end
end
A.new.foo #=> "Class"预期上述方法将返回对象的分配类路径。但我得到的是一个空字符串,而不是“类”。是方法中的实现错误,还是文档没有更新。
这是链接
谢谢
发布于 2014-06-12 13:05:42
我想你刚刚在核心里发现了一个可能的漏洞。我已经向devs报告了这个问题,bug #9938。
我确实怀疑lookup_allocation_info来自object_tracing.c,但还需要进一步调查。
更新: Koichi Sasada (又名ko1)已经确定了原因,并承诺在Ruby2.2中进行修正。同时,您可以使用变通方法在以下模块中手动缓存对象名称
ObjectSpace.each_object(Module){|o| o.name}
放置在对象跟踪代码之前。
发布于 2014-06-12 10:49:18
我想你试过这样,
require 'objspace'
class A
def foo
ObjectSpace::trace_object_allocations do
obj = Object.new
p "#{ObjectSpace::allocation_class_path(obj)}"
end
end
endA.new.foo
#“类”=>“类”
https://stackoverflow.com/questions/24181789
复制相似问题