在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)

4 Solutions collect form web for “在Ruby中,为什么nil.id返回4?”

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

  • 学习Ruby on Rails
  • 如何在Ruby中取消定义类?
  • Rubydevise模式:如何创build一个可扩展的工厂类?
  • 在Ruby中将散列变为string
  • 在Ruby中合并和交错两个数组
  • Rubystring类名称
  • 我怎样才能有rubylogging器日志输出到标准输出以及文件?
  • 在Rails中,如何使用视图呈现JSON?
  • 使用Capistrano将Rails应用程序部署到多个服务器 - 最佳实践
  • Ruby全局匹配正则expression式?
  • 如何使用Paperclip以编程方式设置file upload