ruby - 来自 `ObjectSpace._id2ref` 的错误

标签 ruby ruby-1.9 objectid

ObjectSpace._id2ref 返回的以下两种错误有什么区别?

0x... is recycled object (RangeError)

0x... is not id value (RangeError)

最佳答案

not id value 意味着从来没有一个对象具有该 id。

recycled object 表示曾经有一个具有该 id 的对象,但它已被垃圾回收。

Ruby 1.9.3/Ubuntu 上的演示:

x = Object.new
id = x.object_id

puts "0x%x" % id
# => 0x4aef5e8

puts ObjectSpace._id2ref id
# => #<Object:0x95debd0>

x = nil

puts ObjectSpace._id2ref id
# => #<Object:0x95debd0>

GC.start

puts ObjectSpace._id2ref id
# => 0x4aef5e8 is recycled object (RangeError)

请注意,Object#to_s 中的数字不是object_id - 根据docs它是“对象 ID 的编码”。

关于ruby - 来自 `ObjectSpace._id2ref` 的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13508536/

相关文章:

ruby - 在终端中使用输入文件运行 Ruby 文件?

python - 用新创建的对象 ID 替换复杂数据结构中的对象 ID

bash - 将 Azure 中的 ObjectID 转换为显示名称

ruby-on-rails - 隐藏复选框和分配值 - Ruby on Rails - 简单问题

ruby-on-rails - 将 Ruby 哈希转换为数组

javascript - 使用rails如何将 Controller 中的变量同步到 View ,其中 Controller 是更新的发起者

ruby - 为什么不使用 RVM 安装 Ruby 1.9.2-head?

Ruby Sanitize Code ... 为什么 & sanitized

ruby - 正则表达式错误 : too many multibyte code ranges are specified

php - MongoDB\BSON\ObjectID 在 MongoDB 的 JSON 编码中丢失