我们可以使用ruby中的对象ID访问我们在ruby中创建的对象吗?
在Ruby中如何分配对象ID?某些对象是否具有固定的对象id?我们可以使用对象ID访问它们吗?对象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,等等。但是可以有两个不
nil.object\u id
中,32位返回4
,64位返回8
另外,nil
是一个所谓的立即值true
、false
、fixnums(小整数)有时甚至浮点是其他立即数。他们有固定的ID,原因如下:
- 它们是通过值传递的,而不是像其他(动态分配的)对象那样通过引用传递的
- 只有一个
、一个nil
、一个true
,等等。但是可以有两个不同的数组19
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
id = nil.object_id
ObjectSpace._id2ref(id) # => nil
在某些实现中,该方法可能无法实现或速度非常慢。它最初是一个需要实现的黑客程序,但目前的版本并不这么认为
在Ruby中如何分配对象ID
Ruby语言规范没有说明ID是如何分配的,只是
- 对象在其生存期内必须具有相同的ID
- 两个对象不能同时具有相同的ID
ObjectSpace::id2ref
的方法,但不能保证在所有实现中都存在这种方法,而且这种方法可能非常昂贵,在某些实现中必须使用命令行开关显式启用
在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…
等是固定的,那么它们总是存在于内存中。如果是的话,会不会有表演呢