2014-09-05 2 views
-2

J'essaie d'apprendre les rails et le rubis. Ensuite, je fais face à une questionUtilisation du symbole comme paramètre de la fonction dans Ruby

J'ai trouvé que nous pouvons créer une fonction qui utilise seulement un symbole. Au lieu d'utiliser les hachages.

par exemple:

a={b: "hash value", c: "another has value"} 
printValue(:b) 

est vrai celui-ci peut vous donner l'exemple? J'ai essayé de chercher, mais je ne peux pas le trouver

+0

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) –

+0

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. –

+0

Merci Cary, j'ai supprimé le tag rails – wendy0402

Répondre

2

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.

Questions connexes