2009-02-16 56 views
35

這一直在困擾我很長一段時間。在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如果你想約棄用挑剔)

回答

41

這是因爲零是當語言初始化創建的對象,而該對象的ID恰好總是4.

有關爲什麼更多信息該ID恰好是4,請參閱this博客文章。

+30

我是Ruby的Facebook程序員,碰巧4也是Facebook上的Mark Zuckerber ID。這導致我有史以來最奇怪的錯誤... ;-) – 2010-11-30 19:52:41

4

發生這種情況是因爲每個對象的id都必須以某種方式在C Ruby解釋器中表示。數字被映射到(數字* 2)+1,真實性得到0,虛假得到2並且無剩下4。這只是一個奇怪的實現問題或漏洞抽象。除非你想寫一個Ruby解釋器,否則你不應該擔心它。

11

我一直認爲這是一個很酷的復活節彩蛋:在日本,4是死亡人數。

0

如果你想這IRB你得到4

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

在對零方法設置的紅寶石日本人叫它返回4它的語言標準,他們設置4個爲「危險」或「死亡」

相關問題