Comment comprendre les symboles en Ruby

Malgré la lecture de "La Compréhension De Ruby Symboles", je suis toujours confus par la représentation des données dans la mémoire quand il s'agit de l'utilisation de symboles. Si un symbole, deux d'entre eux contenues dans des objets différents, existent dans le même emplacement de mémoire, alors comment est-il qu'ils contiennent différents valeurs? J'aurais attendu le même emplacement de mémoire pour contenir la même valeur.

Ce un devis à partir du lien:

À la différence des chaînes de caractères, symboles du même nom sont initialisés et d'exister dans la mémoire qu'une seule fois au cours d'une session de ruby

Je ne comprends pas comment il parvient à différencier les valeurs contenues dans le même emplacement de mémoire.

Considérons cet exemple:

patient1 = { :ruby => "red" }
patient2 = { :ruby => "programming" }

patient1.each_key {|key| puts key.object_id.to_s}
3918094
patient2.each_key {|key| puts key.object_id.to_s}
3918094

patient1 et patient2 sont à la fois des tables de hachage, c'est bien. :ruby , cependant, est un symbole. Si nous étions de sortie suivants:

patient1.each_key {|key| puts key.to_s}

Puis ce sera sortie? "red", ou "programming"?

Oublier hachages pour une seconde, je pense à un symbole est un pointeur à une valeur. Les questions que j'ai sont:

  • Puis-je assigner une valeur à un symbole?
  • Est un symbole juste un pointeur vers une variable avec une valeur en elle?
  • Si les symboles sont mondiaux, cela signifie un symbole renvoie toujours à une chose?
  • Il sera sortie ":ruby", parce que vous êtes l'impression d'un Symbole. Si vous dites puts patient1[:ruby], il affichera "rouge", si vous dites puts patient2[:ruby], il aura l'impression de "programmation".
  • Un symbole n'est PAS un pointeur vers une valeur. En interne, un symbole est juste un entier.
InformationsquelleAutor Kezzer | 2010-02-26