Quest-ce quun symbole en rubis?

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 utiliser uniquement des variables?

Merci.

Commentaires

  • en Lisp – dont Ruby est dérivé – un symbole est essentiellement le type de données dune variable; cela signifie que vous pouvez manipuler le programme de manière Reflection-esque lors de son exécution (ce nest pas lexplication la plus cohérente, désolé)

Réponse

Les variables et les symboles sont des choses différentes. Une variable pointe vers différents types de données. Dans Ruby, un symbole ressemble plus à une chaîne quà une variable.

En Ruby, une chaîne est modifiable, alors quun symbole est immuable. Cela signifie quune seule copie dun symbole doit être créée. Ainsi, si vous avoir

x = :my_str y = :my_str 

:my_str ne sera créé quune seule fois, et x et y pointent vers la même zone de mémoire. En revanche, si vous avez

x = "my_str" y = "my_str" 

a la chaîne contient ing 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 des énumérations dans Ruby, ainsi que les clés dun dictionnaire (hachage).

Commentaires

  • Juste pour pousser le point de @mipadi ', lorsque vous comparez une chaîne, vous devez comparer chaque caractère les uns par rapport aux autres. Donc, comparer des chaînes identiques est O (n). Alors que les symboles rubis comparent les références dobjets, la sorcière est O (1).
  • Pourquoi Python na-t-il pas cela?
  • Vous devriez faire attention à ne pas en abuser aussi, car, la dernière fois que je savais, mais je nai pas ' examiné cela dans ruby > 1.9, symboles don ' t get gc ' d et peuvent donc consommer de la mémoire
  • Ils se comportent de la même manière dans Smalltalk, sauf quils ressemblent à #mySymbol .
  • @ frogstarr78 – Sauf si vous générez des symboles par programme (en internant des chaînes sans les vérifier au préalable), vous navez ' à vous soucier de créer trop de symboles.

Réponse

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 une sorte détat, par exemple

order.status = :canceled order.status = :confirmed 

Vous peut également regarder le symbole comme une énumération instantanée. Vous navez pas besoin de définir un symbole, il suffit de lutiliser. Cet article lexplique en détail.

Commentaires

  • Meilleure explication que la plupart des ' semblent si loin.

Réponse

Habituellement, les variables ont tendance à être confondues avec des chaînes, mais je peux vous comprendre de penser que cest une variable. Cest compréhensible. Pensez-y de cette façon:

Le statut dun joueur dans un jeu est représenté par un nombre. 1 signifie vivant, 2 signifie incertain, 3 signifie mort. Cela peut facilement être remplacé par des symboles. Les symboles peuvent être :alive :unsure et :dead. Pour vérifier si un joueur est vivant, au lieu de faire ceci:

if player_status == 1

Vous pouvez faire ceci:

if player_status == :alive

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *