Je m'amuse avec la méthode de Ruby. .object_id
et j'ai remarqué que, dans plusieurs sessions successives d'irb, j'obtiens ces résultats identiques :
false.object_id // 0
true.object_id // 2
nil.object_id // 4
100.object_id // 201
En fait, l'objet_id de chaque entier semble être ((valeur * 2) + 1).
D'autre part, l'object_id d'une chaîne donnée n'est jamais le même après avoir quitté et relancé irb.
Cela soulève plusieurs questions pour moi :
- Y a-t-il un système connu par lequel certains
object_id
sont déterminés ? Les autres sont-elles fondamentalement aléatoires ? - Les identifiants de true, false et nil ne sont pas séquentiels. Existe-t-il un moyen de demander quel objet est représenté par un identifiant donné ? (Je suis curieux de savoir à quoi sont liés les autres ids à un chiffre).
- Pourriez-vous (non pas que vous devriez) écrire du Ruby obscurci où vous utilisez des identifiants d'objets connus pour faire référence à des objets sans les nommer, comme "objet d'id 201 + objet d'id 19" pour signifier "100 + 9" ?
Mise à jour
En utilisant la suggestion d'Andrew Grimm, j'ai essayé de découvrir d'autres objets "low id", mais je n'ai rien trouvé :
- Il ne semble pas y avoir d'autres objets à numérotation paire dans cette séquence - les identifiants 6, 8, 10, etc. ne correspondent à rien.
- Comme le laissait entendre mon expérience précédente, tous les identifiants impairs appartiennent à des numéros. Plus précisément, l'identifiant 1 correspond au nombre 0, le 3 au 1, le 5 au 2, et ainsi de suite.