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)

¿Fue útil?

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"

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top