object_id
的{{1}}是奇数:
Fixnum
虽然看起来任何其他对象的i=0; i += 1 while i.object_id.odd?
# ^CIRB::Abort: abort then interrupt!
i # => 495394962
都是偶数(包括object_id
):
Bignum
这是否与Ruby解释器中的一些模糊优化有关?
答案 0 :(得分:7)
这样做是为了使整数不占用其他对象的所有空间。在Ruby中,所有其他对象甚至都有object_id,它们介于两者之间。整数object_id很容易转换为它们的值:最后一位(总是1)被切断。
整数是一些假对象,它们只不过是一个id和一个共享的方法列表。