我们可以使用 ruby 中的对象 _id 访问我们在 ruby 中创建的对象吗?
Can we access the objects we created in ruby using their object _ids in ruby?
Ruby中的对象 ID 是如何分配的?某些对象是否固定 object_id?我们可以使用它们的对象 _id 访问它们吗?
如何“分配”对象 ID 取决于 Ruby 实现和其他因素,例如 OS 位数。例如,在 32 位的 CRuby nil.object_id
returns 4
和 64 位的 8
中。
另外nil
是所谓的立即数。 true
、false
、fixnums(小整数)有时甚至浮点数都是其他立即值。他们有固定的 ID,原因如下:
- 它们是按值传递的,而不是像其他(动态分配的)对象那样按引用传递的
- 只有一个
nil
、一个true
、一个19
等,但是可以有两个不同的数组
请参阅 BasicObject#object_id
的文档。您还可以单击以切换源以查看 CRuby 实现。
调用 ObjectSpace._id2ref
以通过 ID 检索对象:
id = nil.object_id
ObjectSpace._id2ref(id) # => nil
在某些实现中,该方法可能无法实现或非常慢。 According to matz it was originally a hack needed to implement weakref
but current versions don't call it anymore.
How are the object IDs assigned in Ruby?
Ruby 语言规范没有说明 ID 的分配方式,仅说明
- 对象在其生命周期内必须具有相同的 ID
- 任何两个对象不能同时具有相同的 ID
请注意,这并不禁止两个不同的对象在不同时间可能具有相同的 ID,即允许重复使用 ID。
Do some objects have fixed object_id?
Ruby 语言规范没有说明 ID 的分配方式。在某些 Ruby 实现中,某些对象可能有也可能没有固定 ID。
Can we access them using their object _ids?
在某些实现中,有一个名为 ObjectSpace::_id2ref
的方法,但不能保证此方法在所有实现中都存在,而且它可能非常昂贵,并且在某些实现中必须使用命令行显式启用切换。
Ruby中的对象 ID 是如何分配的?某些对象是否固定 object_id?我们可以使用它们的对象 _id 访问它们吗?
如何“分配”对象 ID 取决于 Ruby 实现和其他因素,例如 OS 位数。例如,在 32 位的 CRuby nil.object_id
returns 4
和 64 位的 8
中。
另外nil
是所谓的立即数。 true
、false
、fixnums(小整数)有时甚至浮点数都是其他立即值。他们有固定的 ID,原因如下:
- 它们是按值传递的,而不是像其他(动态分配的)对象那样按引用传递的
- 只有一个
nil
、一个true
、一个19
等,但是可以有两个不同的数组
请参阅 BasicObject#object_id
的文档。您还可以单击以切换源以查看 CRuby 实现。
调用 ObjectSpace._id2ref
以通过 ID 检索对象:
id = nil.object_id
ObjectSpace._id2ref(id) # => nil
在某些实现中,该方法可能无法实现或非常慢。 According to matz it was originally a hack needed to implement weakref
but current versions don't call it anymore.
How are the object IDs assigned in Ruby?
Ruby 语言规范没有说明 ID 的分配方式,仅说明
- 对象在其生命周期内必须具有相同的 ID
- 任何两个对象不能同时具有相同的 ID
请注意,这并不禁止两个不同的对象在不同时间可能具有相同的 ID,即允许重复使用 ID。
Do some objects have fixed object_id?
Ruby 语言规范没有说明 ID 的分配方式。在某些 Ruby 实现中,某些对象可能有也可能没有固定 ID。
Can we access them using their object _ids?
在某些实现中,有一个名为 ObjectSpace::_id2ref
的方法,但不能保证此方法在所有实现中都存在,而且它可能非常昂贵,并且在某些实现中必须使用命令行显式启用切换。