在运行Ruby 2.3.3的Windows 10系统中,irb告诉我:
false.object_id
=> 0
true.object_id
=> 2
nil.object_id
=> 4
但是在c9.io上,在运行Ruby2.3.0的Ubuntu14.04.3中,irb告诉我:
false.object_id
=> 0
true.object_id
=> 20
nil.object_id
=> 8
这并不重要(谁知道呢?),但为什么这些数字是不同的?
注意:这与this one的问题不完全相同。它们都是Ruby 2.3。
发布于 2017-03-01 08:53:44
正如the accepted answer在question you linked to上说的那样,0、20和8是在YARV上使用flonum时使用的对象ID。
因此,很明显,您的Windows实现没有使用flonum。最可能的原因是,您不是在使用YARV (例如使用JRuby或Rubinius),也可能是使用YARV,而是使用32位版本。
注意:对象ID是特定Ruby实现的私有内部实现细节。您正在使用的Ruby版本是完全无关的。相关的是您使用的是哪个实现、哪个版本、哪个命令行选项、如何编译它、您的环境是什么等等。这与语言无关。
还要注意:永远不要依赖对象ID的特定值。对象ID保证有两件事,而且只有这两件事:
以下是一些不能保证的事情:
nil
和false
不适用),或者它总是以某种方式与对象的值相关(因为YARV优化Integer
的特定方式,小整数的对象ID始终是2n+1,但这只适用于小整数(“小”的定义取决于您是运行64位版本还是32位版本的YARV),而且它只是在没有通知的情况下随时更改的实现细节)。https://stackoverflow.com/questions/42522964
复制相似问题