【问题标题】:Generating a string representing the object id生成表示对象 id 的字符串
【发布时间】:2016-06-19 19:28:48
【问题描述】:

我有下面的对象,我想把 :a_list 和 :b_list 的 attr_accessor 隐藏在下面

<Namespace::SomeObject:0x00000002674538 @a_list={}, @b_list={}>

我知道我应该重写 inspect 方法,例如:

def inspect
  "#<{self.class}: >"
end

如何获得 ID 0x00000002674538

【问题讨论】:

  • 列出的是实例变量@a_list@b_list。 (无论它们是否绑定) attr 访问器是无关紧要的。

标签: ruby object inspect


【解决方案1】:
"%#016x" % (object_id << 1)

"%#016x" % (object_id * 2)

【讨论】:

  • 旁注: 这仅在 64 位平台上按预期工作。与 ruby​​ 打印的内容相比,在 32 位上它现在失败了。在 128 位上,它会在最近的将来 [可能] 失败。所以,请注意按原样使用它。
  • @sawa:这是如何工作的,为什么在 32 位平台上会失败,为什么在 128 位平台上会失败?
  • 可能 mudasobwa 提到了0 填充。在上面的代码中,字符串总共设置为 16 个字符。您可以根据您的机器进行调整。如果您想要一个无处不在的解决方案,请将16 替换为1.size * 2
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
相关资源
最近更新 更多