在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他们设置为“危险”或“死亡”的语言标准,