在Ruby中,为什么nil.id返回4?

这已经困扰我很长一段时间了。

>> nil.id (irb):2: warning: Object#id will be deprecated; use Object#object_id => 4 

为什么nil.id是4? (或者如果你想挑剔的话可以用nil.object_id)

这是因为nil是在语言初始化时创build的对象,并且该对象的id恰好总是4。

有关为什么id恰好是4的更多信息,请参阅此博客文章。

我一直认为这是一个很酷的复活节彩蛋:在日本,4是死亡人数。

发生这种情况是因为每个对象的id都必须以某种方式在C Ruby解释器中表示。 数字被映射到(数字* 2)+1,真实性得到0,虚假得到2,没有剩下4。 这只是一个奇怪的实现问题或泄漏抽象。 除非你想写一个Ruby解释器,否则你不应该担心。

如果你正在尝试这个irb你得到4

 irb >> NIL.id (irb):7: warning: Object#id will be deprecated; use Object#object_id => 4 

ruby日本人设置nil方法调用它返回4他们设置为“危险”或“死亡”的语言标准,