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

时间:2009-02-16 14:23:34

标签: ruby

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

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

为什么nil.id为4? (或者如果你想对弃用方面挑剔,则为nil.object_id)

4 个答案:

答案 0 :(得分:41)

这是因为nil是语言初始化时创建的对象,该对象的id始终为4。

有关id恰好为4的原因的详细信息,请参阅this博文。

答案 1 :(得分:11)

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

答案 2 :(得分:4)

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

答案 3 :(得分:0)

如果您在irb中尝试此操作,那么您将获得4

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

在红宝石中日本人设置nil方法称它返回4它的语言标准,他们将4设为“危险”或“死亡”