Un symbole est un objet qui a une correspondance biunivoque avec n'importe quelle chaîne de caractères. par officiel
Commencez par créer un objet symbole en préfixant la chaîne avec deux points ":".
irb(main):001:0> :name
=> :name
irb(main):002:0> :name.class
=> Symbol
À première vue, cela ressemble à une chaîne, mais ruby traite l'objet symbole comme un ** entier **. Il s'agit d'une histoire complètement interne, mais contrairement aux chaînes, le symbole est traité comme un entier, il est donc traité à grande vitesse.
Par exemple, lorsque vous générez une chaîne avec le même contenu L'objet String générera un autre objet même si le contenu est le même. Les objets symbole pointent vers le même objet, ce qui économise de la mémoire.
Regardons un exemple avec String.
irb(main):014:0> string1 = 'String'
=> "String"
irb(main):015:0> string1.object_id
=> 180
irb(main):016:0> string2 = 'String'
=> "String"
irb(main):017:0> string2.object_id
=> 200
Si vous considérez l'ID d'objet comme une entité, il pointe vers des choses différentes.
En revanche, en symbole, si le contenu est le même objet, il pointe vers le même ID d'objet. En d'autres termes, cela fait référence à la même chose qu'une entité.
irb(main):021:0> symbol1 = :String
irb(main):021:0> symbol1 = :String
=> :String
irb(main):022:0> symbol1.object_id
=> 91428
irb(main):023:0> symbol2 = :String
=> :String
irb(main):024:0> symbol2.object_id
=> 91428
Selon cette spécification, même si un nouvel objet Symbol est créé, un seul objet est créé. En conséquence, la consommation de mémoire peut être réduite.
Le symbole est souvent utilisé comme clé pour les objets de hachage. (hachage: objet contenant la combinaison clé / valeur)
irb(main):025:0> { name: 'Masuyama', age: 29 }
=> {:name=>"Masuyama", :age=>29}
L'exemple de hachage ci-dessus a la valeur Masuyama pour la clé nommée name et Vous pouvez représenter des données avec une valeur de 29 pour une clé d'âge.
Dans Ruby, la notation de l'ajout d'un deux-points ":" à la chaîne de caractères clé apparaît souvent, La clé à ce moment sera traitée comme un symbole.
Il est facile de comprendre si vous imaginez le nom de colonne de la base de données, Puisque la clé elle-même est référencée à partir de diverses données Il est plus efficace d'utiliser le même objet que d'en créer un nouveau chaque fois que des données sont créées. C'est pourquoi l'objet symbole est souvent utilisé comme clé de hachage.