Comment comprendre les symboles dans Ruby

Malgré la lecture de ” Understanding Ruby Symbols “, la représentation des données en mémoire lors de l’utilisation de symboles me laisse perplexe. Si un symbole, deux d’entre eux contenus dans des objects différents, existe dans le même emplacement mémoire, alors comment se fait-il qu’ils contiennent des valeurs différentes ? Je m’attendrais à ce que le même emplacement mémoire contienne la même valeur.

Ceci une citation du lien:

Contrairement aux chaînes, les symboles du même nom sont initialisés et n’existent en mémoire qu’une seule fois lors d’une session de ruby

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

Considérez 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 tous deux des hachages, ça va. :ruby est cependant un symbole. Si nous devions produire ce qui suit:

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

Alors qu’est-ce qui sortira? "red" ou "programming" ?

Oubliant les hashs pendant une seconde, je pense qu’un symbole est un pointeur sur une valeur. Les questions que j’ai sont:

  • Puis-je atsortingbuer une valeur à un symbole?
  • Un symbole est-il juste un pointeur sur une variable avec une valeur?
  • Si les symboles sont globaux, cela signifie-t-il qu’un symbole pointe toujours vers une chose?