Ruby中的对象地址
简短版本:类的默认检查方法显示对象的地址.*如何在我自己的自定义检查方法中执行此操作?
*(要清楚,我想要通常从检查中得到的8位十六进制数.我不关心实际的内存地址.我只是把它称为内存地址,因为它看起来像一个.我知道Ruby是内存安全的.) 长版:我有两个类,Thing和ThingList. ThingList是Array的一个子类,专门用于保存Things.由于Things的性质以及它们在我的程序中的使用方式,Things有一个实例变量@container,它指向持有Thing的ThingList. 两件事可能具有完全相同的数据.因此,当我调试应用程序时,我可以可靠地区分两件事的唯一方法是使用inspect来显示它们的地址.但是当我检查Thing时,我会在输出页面上获取页面,因为inspect将递归检查@container,导致列表中的每个Thing也被检查! 我只需要输出的第一部分.如何在Thing上编写一个自定义检查方法,只显示这个? #<Thing:0xb7727704> 编辑:我刚刚意识到默认的to_s就是这样做的.我之前没有注意到这一点,因为我有一个自定义to_s,提供有关该对象的人类可读细节. 假设我不能使用to_s,并且我必须编写自定义检查. 解决方法
您可以使用object_id获取地址并将其乘以2 *并使用sprintf(又名%)以十六进制显示:
"#<Thing:0x%08x>" % (object_id * 2) 当然,只要您只需要数字是唯一的并且不关心它是实际地址,您就可以省略* 2. *由于您不需要理解的原因(意思是:我不理解它们),object_id返回对象内存地址的一半,因此您需要乘以2才能获得实际地址. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Limitations of Flashback Database【每日一译】--20121122
- c# – 如何区分服务器版本和Windows客户端版本?
- Ruby新手:未定义的方法`with_indifferent_access’
- 在C中分配超过4GB的内存
- vue 的keep-alive缓存功能的实现
- flex – Flash:带参考表的AMF3?
- 使用JsonCpp在android NDK中解析Json
- nosql – RavenDB – 查询问题 – 陈旧的结果/索引
- ruby-on-rails – 在scss文件轨道中的asset_path
- cocos2dx lua-binding<二>用cocos code ide