Il est assez commun pour les personnes qui apprennent à Ruby de ne pas bien comprendre les symboles. Un symbole est un type Ruby standard, tout comme les autres types Ruby. Voici un exemple de la façon dont un symbole est juste un objet qui est d'un certain type:
'A'.class # => String
1.class # => Fixnum
:a.class # => Symbol
Comme tout autre type, les symboles ont des méthodes. Si vous ouvrez l'IRB et tapez :a.methods.sort
, il vous montrera toutes les méthodes que vous pouvez appeler sur un symbole. Par exemple, :a.to_s # => 'a'
Comme vous l'avez remarqué, les symboles sont souvent utilisés comme clés Hash
. Cependant, d'autres types peuvent également être Hash
clés:
my_hash = { 'A' => 'an A', 1 => 'a 1', :a => 'the symbol a'}
my_hash['A'] # => 'an A'
my_hash[1] # => 'a 1'
my_hash[:a] # => 'the symbol a'
Tout comme vous pouvez passer un String
ou d'autres types à une méthode, vous pouvez passer un Symbol
. En fait, dans le dernier exemple, nous passons un String
, un Fixnum
, puis un Symbol
au my_hash
de la méthode []
.
La raison pour laquelle les gens aiment vraiment les symboles des clés de hachage est qu'ils sont très légers à réutiliser. Voici un exemple montrant l'une des principales différences entre un symbole et tout autre objet:
"a".object_id # => 70098399407740
"a".object_id # => 70098399393460
"a".object_id # => 70098399388140
:a.object_id # => 359368
:a.object_id # => 359368
:a.object_id # => 359368
Comme vous pouvez le voir, je crée trois chaînes qui ont la valeur « a », et ils ont chacun un identifiant d'objet différent . En d'autres termes, il y a trois objets String
en mémoire qui contiennent la valeur "a". En revanche, chaque fois que j'utilise :a
, il a le même identifiant d'objet. Il n'y a qu'un seul objet :a
dans mon programme entier.
Il n'est pas rare de transmettre des symboles à des méthodes. Vous verrez beaucoup de choses dans Rails.
duplication possible de [Comment les fonctions utilisent-elles les arguments de hachage dans Ruby?] (Http://stackoverflow.com/questions/16576477/how-do-functions-use-hash-arguments-in-ruby) –
Ceci est un question pure-Ruby, donc pas de tag Rails, s'il vous plait. Si vous ajoutez une balise inappropriée, certains membres perdront du temps à lire une question qui ne les intéressera pas, tandis que d'autres qui auront filtré des questions avec cette balise risquent de ne pas répondre à une question qui les intéresserait. –
Merci Cary, j'ai supprimé le tag rails – wendy0402