35 votes

En Ruby, pourquoi nil.id renvoie-t-il 4 ?

Cette question me préoccupe depuis un certain temps.

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

Pourquoi nil.id serait-il 4 ? (ou nil.object_id si vous voulez être pointilleux sur les dépréciations)

41voto

dagvl Points 590

En effet, nil est un objet créé lors de l'initialisation du langage, et l'identifiant de cet objet est toujours 4.

Pour plus d'informations sur la raison pour laquelle l'id est de 4, voir ce blog post.

11voto

Andrew Peters Points 6012

J'ai toujours pensé que c'était un oeuf de Pâques cool : Au Japon, 4 est le nombre de la mort.

4voto

LDomagala Points 1360

Cela se produit parce que l'identifiant de chaque objet doit être représenté d'une manière ou d'une autre dans l'interpréteur C Ruby. Les nombres ont été représentés par (nombre*2)+1, la véracité a obtenu 0, la fausseté a obtenu 2 et il restait 4 à nil. C'est juste un problème d'implémentation bizarre ou une fuite dans l'abstraction. Vous ne devriez pas vous en préoccuper, sauf si vous voulez écrire un interpréteur Ruby.

0voto

Sumit Munot Points 1253

Si vous essayez ceci dans irb vous obtenez 4

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

En ruby, les japonais définissent sur les méthodes nil l'appel qui renvoie 4, c'est la norme de la langue qu'ils définissent 4 comme "dangereux" ou "mort".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X