我们可以使用ruby中的对象ID访问我们在ruby中创建的对象吗?

我们可以使用ruby中的对象ID访问我们在ruby中创建的对象吗?,ruby,objectid,Ruby,Objectid,在Ruby中如何分配对象ID?某些对象是否具有固定的对象id?我们可以使用对象ID访问它们吗?对象ID的“分配”方式取决于Ruby实现和其他因素,如操作系统比特度。例如,在nil.object\u id中,32位返回4,64位返回8 另外,nil是一个所谓的立即值true、false、fixnums(小整数)有时甚至浮点是其他立即数。他们有固定的ID,原因如下: 它们是通过值传递的,而不是像其他(动态分配的)对象那样通过引用传递的 只有一个nil、一个true、一个19,等等。但是可以有两个不

在Ruby中如何分配对象ID?某些对象是否具有固定的对象id?我们可以使用对象ID访问它们吗?

对象ID的“分配”方式取决于Ruby实现和其他因素,如操作系统比特度。例如,在
nil.object\u id
中,32位返回
4
,64位返回
8

另外,
nil
是一个所谓的立即值
true
false
、fixnums(小整数)有时甚至浮点是其他立即数。他们有固定的ID,原因如下:

  • 它们是通过值传递的,而不是像其他(动态分配的)对象那样通过引用传递的
  • 只有一个
    nil
    、一个
    true
    、一个
    19
    ,等等。但是可以有两个不同的数组
请参阅的文档。您还可以单击以切换源代码,以查看CRuby实现

调用以按ID检索对象:

id = nil.object_id
ObjectSpace._id2ref(id) # => nil

在某些实现中,该方法可能无法实现或速度非常慢。它最初是一个需要实现的黑客程序,但目前的版本没有这样做。

如何“分配”对象ID取决于Ruby实现和其他因素,如操作系统比特度。例如,在
nil.object\u id
中,32位返回
4
,64位返回
8

另外,
nil
是一个所谓的立即值
true
false
、fixnums(小整数)有时甚至浮点是其他立即数。他们有固定的ID,原因如下:

  • 它们是通过值传递的,而不是像其他(动态分配的)对象那样通过引用传递的
  • 只有一个
    nil
    、一个
    true
    、一个
    19
    ,等等。但是可以有两个不同的数组
请参阅的文档。您还可以单击以切换源代码,以查看CRuby实现

调用以按ID检索对象:

id = nil.object_id
ObjectSpace._id2ref(id) # => nil
在某些实现中,该方法可能无法实现或速度非常慢。它最初是一个需要实现的黑客程序,但目前的版本并不这么认为

在Ruby中如何分配对象ID

Ruby语言规范没有说明ID是如何分配的,只是

  • 对象在其生存期内必须具有相同的ID
  • 两个对象不能同时具有相同的ID
请注意,这并不禁止两个不同的对象在不同的时间具有相同的ID,即允许重用ID

某些对象是否具有固定的对象id

Ruby语言规范没有说明ID是如何分配的。在某些Ruby实现中,某些对象可能有固定ID,也可能没有固定ID

我们可以使用他们的对象ID访问他们吗

在某些实现中,有一种称为
ObjectSpace::id2ref
的方法,但不能保证在所有实现中都存在这种方法,而且这种方法可能非常昂贵,在某些实现中必须使用命令行开关显式启用

在Ruby中如何分配对象ID

Ruby语言规范没有说明ID是如何分配的,只是

  • 对象在其生存期内必须具有相同的ID
  • 两个对象不能同时具有相同的ID
请注意,这并不禁止两个不同的对象在不同的时间具有相同的ID,即允许重用ID

某些对象是否具有固定的对象id

Ruby语言规范没有说明ID是如何分配的。在某些Ruby实现中,某些对象可能有固定ID,也可能没有固定ID

我们可以使用他们的对象ID访问他们吗


在某些实现中,有一种称为
ObjectSpace::id2ref
的方法,但这种方法不能保证在所有实现中都存在,而且它可能非常昂贵,在某些实现中,必须使用命令行开关显式启用。

您只需设置与对象相等的变量,并以这种方式访问它们即可。,即x=Object.new。然后只需调用“x”即可访问对象。Id、object_Id和_Id之间的区别是什么?您只需将变量设置为与对象相等,并以这种方式访问它们,即x=object.new。然后调用“x”来访问对象。Id、object_Id和_Id之间的区别是什么?我刚刚在irb上研究了一些东西,发现整数有固定的object_Id(2*i+1)模式。其中i是整数。没有整数具有固定ID的Ruby实现。有些Ruby实现中,
Fixnum
s具有固定的ID,但这是特定Ruby实现的私有内部实现细节,Ruby语言规范不保证这一点,对于其他Ruby实现不一定如此,事实上,甚至不能保证该实现的未来版本是正确的,即它可能随时更改而不另行通知。我只是在irb上研究了一下,我发现整数具有固定的object_id(2*i+1)模式。其中i是整数。没有整数具有固定ID的Ruby实现。有些Ruby实现中,
Fixnum
s具有固定的ID,但这是特定Ruby实现的私有内部实现细节,Ruby语言规范不保证这一点,对于其他Ruby实现不一定如此,事实上,甚至不能保证该实现的未来版本为真,即它可能随时更改而不另行通知。您所说的立即值是什么意思?另外,如果
object\u id
对于
1、2…
等是固定的,那么它们总是存在于内存中。如果是的话,会不会有表演呢