Pergunta
Esta é foi me incomodando há algum tempo.
>> nil.id
(irb):2: warning: Object#id will be deprecated; use Object#object_id
=> 4
Por que nil.id ser 4? (Ou nil.object_id se você quiser ser exigente sobre depreciações)
Solução
Isto porque nil é um objeto criado quando os inicializa idioma e ID desse objeto passa a ser sempre 4.
Para obter mais informações sobre por que o id passa a ser 4, veja este post .
Outras dicas
Eu sempre assumi que era um fresco easter egg:. No Japão 4 é o número de morte
Isso acontece porque o ID de cada objeto tinha de alguma forma ser representado no interpretador C Ruby. Números foi mapeado para (número * 2) 1, truthiness tem 0, falsidade tem 2 e nil tinha quatro esquerda. É apenas um problema de implementação estranho ou abstração gotejante. Você não deve se preocupar com isso, a menos que você quer escrever um interpretador Ruby.
Se você está tentando isso no irb você está recebendo 4
irb
>> NIL.id
(irb):7: warning: Object#id will be deprecated; use Object#object_id
=> 4
As pessoas em ruby ??japoneses estabelecidos em métodos nil chamá-lo de volta 4-lo do padrão de linguagem que eles set 4 como "Dangerous" OR "Morte"