有没有办法打印出Ruby对象的内存位置,而不是puts self
,因为我希望有一个自定义to_s
方法,并打印内存指针位置作为其中一个要输出的信息。
答案 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中;我不确定,通过)。