Malgré la lecture de " Understanding Ruby Symbols ", je suis toujours confus par la représentation des données en mémoire quand il s'agit d'utiliser des symboles. Si un symbole, dont deux contenus dans des objets différents, existe dans le même emplacement mémoire, comment se fait-il qu'ils contiennent des valeurs différentes ? Je m'attendais à ce que le même emplacement mémoire contienne la même valeur.
Voici 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.
Prenons 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 les deux des hachages, c'est très bien. :ruby
cependant est un symbole. Si nous devions produire ce qui suit:
patient1.each_key {|key| puts key.to_s}
Alors qu'est-ce qui sera produit? "red"
, ou "programming"
?
Oubliant les hachages pendant une seconde, je pense qu'un symbole est un pointeur vers une valeur. Les questions que j'ai sont:
- Puis-je attribuer une valeur à un symbole?
- Un symbole est-il juste un pointeur vers une variable contenant une valeur?
- Si les symboles sont globaux, cela signifie-t-il qu'un symbole pointe toujours vers une chose?
puts patient1[:ruby]
, il imprimera "rouge", si vous ditesputs patient2[:ruby]
, il imprimera "programmation".