【发布时间】:2010-10-24 21:28:07
【问题描述】:
短版: 类的默认inspect 方法显示对象的地址。* 如何在我自己的自定义inspect 方法中做到这一点?
*(说清楚,我想要你通常从inspect 得到的 8 位十六进制数。我不关心实际的内存地址。我只是称它为内存地址,因为它 看起来像一个。我知道 Ruby 是内存安全的。)
长版:我有两个课程,Thing 和 ThingList。 ThingList 是 Array 的子类,专门设计用于保存事物。由于事物的性质以及它们在我的程序中的使用方式,事物有一个实例变量@container,它指向包含Thing 的ThingList。
两个事物有可能拥有完全相同的数据。因此,当我调试应用程序时,我能够可靠地区分两个事物的唯一方法是使用inspect,它会显示它们的地址。但是,当我 inspect 和 Thing 时,我会得到一页一页的输出,因为 inspect 将递归检查 @container,导致列表中的每个事物也被检查!
我只需要输出的第一部分。如何在 Thing 上编写一个自定义的 inspect 方法来显示这个?
#<Thing:0xb7727704>
编辑:我刚刚意识到默认的to_s 就是这样做的。我之前没有注意到这一点,因为我有一个自定义的to_s,它提供了关于对象的可读详细信息。
假设我不能使用to_s,我必须编写一个自定义的inspect。
【问题讨论】:
标签: ruby debugging memory-address inspect