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)

Foi útil?

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"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top