Pregunta
Esto se me ha estado molestando desde hace bastante tiempo.
>> nil.id
(irb):2: warning: Object#id will be deprecated; use Object#object_id
=> 4
¿Por qué se nil.id ser de 4? (O nil.object_id si quieres ser exigente con deprecations)
Solución
Esto se debe a nil es un objeto creado cuando el lenguaje se inicia, y la identificación de dicho objeto pasa a ser siempre 4.
Para obtener más información acerca de por qué el id pasa a ser 4, consulte esta entrada en el blog.
Otros consejos
Yo siempre había asumido que era un huevo de Pascua cool:. En Japón 4 es el número de la muerte
Esto ocurre porque el id de cada objeto tiene que estar representado de alguna manera en el intérprete de Ruby C. Números consiguieron asignan a (número * 2) 1, truthiness obtuvo 0, falsedad conseguido 2 y 4 nulos tenido izquierda. Está sólo un problema de implementación raro o abstracción con fugas. Usted no debe preocuparse por ello, a menos que usted quiere escribir un intérprete de Ruby.
Si usted está tratando en esta IRB que está recibiendo 4
irb
>> NIL.id
(irb):7: warning: Object#id will be deprecated; use Object#object_id
=> 4
En los japoneses rubí establecidos en los métodos nil llaman devuelve 4 es lenguaje estándar que establecen 4 como "peligroso" o "Muerte"