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

Rpr*_*ata 6 ruby

有没有办法打印出Ruby对象的内存位置,而不是 puts self因为我想要一个自定义to_s方法并将内存指针位置打印为要输出的信息之一.

whi*_*ark 17

我不知道为什么你想这样的功能,这是非常特定于实现的,但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" 
Run Code Online (Sandbox Code Playgroud)

有关其原因的解释,请查看MRI中的相关行gc.c.

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

  • @Andrew,MRI中的这些记忆位置本身绝对没有任何价值.IMO会更好地显示`object_id`(至少在Ruby方面是明确定义的). (2认同)