为什么`Fixnum`的`object_id`是奇数?

时间:2015-04-04 21:21:43

标签: ruby

object_id的{​​{1}}是奇数:

Fixnum

虽然看起来任何其他对象的i=0; i += 1 while i.object_id.odd? # ^CIRB::Abort: abort then interrupt! i # => 495394962 都是偶数(包括object_id):

Bignum

这是否与Ruby解释器中的一些模糊优化有关?

1 个答案:

答案 0 :(得分:7)

这样做是为了使整数不占用其他对象的所有空间。在Ruby中,所有其他对象甚至都有object_id,它们介于两者之间。整数object_id很容易转换为它们的值:最后一位(总是1)被切断。

整数是一些假对象,它们只不过是一个id和一个共享的方法列表。