如何打印Ruby对象的内存位置

时间:2011-08-07 16:36:24

标签: ruby

有没有办法打印出Ruby对象的内存位置,而不是puts self,因为我希望有一个自定义to_s方法,并打印内存指针位置作为其中一个要输出的信息。

1 个答案:

答案 0 :(得分:15)

我不知道为什么你想要这样的功能,这是非常特定于实现,但在MRI 1.9上你可以(ab)使用object_id

ruby-1.9.2-p180 :022 > class A; end
 => nil 
ruby-1.9.2-p180 :023 > a = A.new
 => #<A:0xa2b72e4> 
ruby-1.9.2-p180 :024 > a.object_id.to_s(16)
 => "515b972" 
ruby-1.9.2-p180 :025 > (a.object_id << 1).to_s(16)
 => "a2b72e4" 

有关其原因的解释,请查看核查gc.c中的relevant lines

请注意,这不适用于其他实现(JRuby,Rubinius),并且可能会在未来的Ruby版本中中断。此外,在某些实现中可能根本没有办法获取地址(我怀疑你不能在JRuby中;我不确定,通过)。