Je suis totalement nouveau dans le monde Ruby et je suis un peu confus avec le concept de symboles. Quelle est la différence entre les symboles et les variables? Pourquoi ne pas simplement utiliser des variables?
Merci.
Je suis totalement nouveau dans le monde Ruby et je suis un peu confus avec le concept de symboles. Quelle est la différence entre les symboles et les variables? Pourquoi ne pas simplement utiliser des variables?
Merci.
Réponses:
Les variables et les symboles sont des choses différentes. Une variable pointe sur différents types de données. En Ruby, un symbole ressemble plus à une chaîne qu'une variable.
En Ruby, une chaîne est modifiable, alors qu'un symbole est immuable. Cela signifie qu'une seule copie d'un symbole doit être créée. Ainsi, si vous avez
x = :my_str
y = :my_str
:my_str
ne sera créé qu'une seule fois x
et y
pointe vers la même zone de mémoire. D'autre part, si vous avez
x = "my_str"
y = "my_str"
une chaîne contenant my_str
sera créé deux fois , et x
et y
pointera vers différentes instances.
En conséquence, les symboles sont souvent utilisés comme l’équivalent d’énums en Ruby, ainsi que les clés d’un dictionnaire (hash).
#mySymbol
.
Le symbole en Ruby est fondamentalement la même chose que le symbole dans le monde réel. Il est utilisé pour représenter ou nommer quelque chose.
Les symboles sont très couramment utilisés pour représenter un type d'état, par exemple
order.status = :canceled
order.status = :confirmed
Vous pouvez également regarder le symbole comme enum instantané. Vous n'avez pas besoin de définir un symbole, vous l'utilisez simplement. Cet article l'explique en détail.
Habituellement, les variables ont tendance à être confondues avec des chaînes, mais je peux comprendre que vous pensiez qu'il s'agissait d'une variable. C'est compréhensible. Pense-y de cette façon:
Le statut d'un joueur dans une partie est représenté par un numéro. 1 signifie vivant, 2 signifie incertain, 3 signifie mort. Cela peut facilement être remplacé par des symboles. Les symboles pourraient être :alive
:unsure
et :dead
. Pour vérifier si un joueur est en vie, au lieu de faire ceci:
if player_status == 1
Vous pourriez faire ceci:
if player_status == :alive