Cette fois, nous verbaliserons les symboles et les méthodes destructrices.
Il semble qu'il y ait trop de symboles et de styles d'écriture, donc je ne suis pas sûr de ce que c'est. Avec les deux points devant et derrière, tous semblaient être des symboles ... il n'y avait aucun sentiment d'unité. C'est parce que le code que j'ai lu a été écrit de différentes manières, et aucun des mérites n'était clair.
Mais ce n'était pas le cas. Plutôt que d'avoir de nombreuses façons d'écrire des symboles, il y avait de nombreuses façons d'écrire des hachages.
** Le symbole était juste une notation avec un deux-points devant le nom **
:key
Ce qui précède est le symbole.
J'étais confus car il y a 4 modèles d'écriture comme indiqué ci-dessous, et le style d'écriture qui ressemble à un symbole est mélangé, donc ne pas comprendre cela en tant que symbole a conduit à une compréhension lente en premier lieu. Oups.
Cela semble un peu étrange de pouvoir accéder à la valeur même en japonais. La version de ruby est
ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin19]
est.
various_hash.rb
#Hash ordinaire
nomal_hash = {
"Avdol" => "Magician's red",
"Igy" => "the fool",
}
nomal_hash_two = {
"Sorajo Shotaro" => "Platine étoile",
"Noriaki Kakyoin" => "Vert Hiérophante",
}
#Hash défini avec le symbole comme clé
symbol_hash = {
:Avdol => "Magician's red",
:Igy => "the fool",
}
symbol_hash_two = {
:Sorajo Shotaro=> "Platine étoile",
:Noriaki Kakyoin=> "Vert Hiérophante",
}
#Lorsque le symbole est une clé, il peut être abrégé comme JSON
json_like_hash = {
"Avdol": "Magician's red",
"Igy": "the fool",
}
json_like_hash_two = {
"Sorajo Tarojo": "Platine étoile",
"Noriaki Kakyoin": "Vert Hiérophante",
}
#Pas besoin de guillemets doubles
#C'est la même chose que la notation d'objet JavaScript
no_double_quote_hash = {
Avdol: "Magician's red",
Igy: "the fool",
}
no_double_quote_hash_two = {
Sorajo Shotaro: "Platine étoile",
Noriaki Kakyoin: "Vert Hiérophante",
}
#Comment accéder à chacun
#Le hachage normal utilise une clé de chaîne
puts "Le stand d'Avdol#{nomal_hash["Avdol"]}(Clé de chaîne)"
puts "Le stand de Sorajo Shotaro#{nomal_hash_two["Sorajo Shotaro"]}(Clé de chaîne)"
#Les hachages composés de symboles utilisent des touches de symboles
puts "Le stand d'Avdol#{symbol_hash[:Avdol]}(Touche symbole)"
puts "Le stand de Sorajo Shotaro#{symbol_hash_two[:Sorajo Shotaro]}(Touche symbole)"
#Le hachage écrit dans le style Jason utilise également le symbole comme clé
puts "Le stand d'Igy#{json_like_hash[:Igy]}(Touche symbole)"
puts "Le stand de Noriaki Kakyoin#{json_like_hash_two[:Noriaki Kakyoin]}(Touche symbole)"
#Les hachages qui ne nécessitent pas de quarts utilisent également des symboles comme clés
puts "Le stand d'Igy#{no_double_quote_hash[:Igy]}C'est un point (symbole clé)"
puts "Le stand de Noriaki Kakyoin#{no_double_quote_hash_two[:Noriaki Kakyoin]}C'est un point (symbole clé)"
Résultat de sortie
Le stand d'Avdol est magicien's rouge (clé de chaîne)
Le stand de Sorajo Shotaro est Star Platinum (clé de chaîne de caractères)
Le stand d'Avdol est magicien's rouge (touche symbole)
Le stand de Sorajo Shotaro est Star Platinum (clé symbolique)
Le stand d'Igy est le fou (symbole clé)
Le stand de Noriaki Kakyoin est Hierophant Green (symbole clé)
Le stand d'Igy est le point fou (clé de symbole)
Le stand de Noriaki Kakyoin est un point vert Hiérophante (clé symbolique)
Les références [Ruby] Méthodes de transmission de référence et destructives
C'est une histoire de passage par valeur, de passage par référence et de passage par référence. Il est familier à l'histoire des pointeurs de langage C.
Passer par valeur signifie envoyer les données (objet) elles-mêmes. Si x = 200, cela signifie que les données (objet) de 200 elles-mêmes sont copiées et transmises.
Passer par référence signifie passer la ** variable location ** avec la donnée (objet), à proprement parler, l'adresse de la mémoire réservée à la ** variable **. En d'autres termes, dans l'exemple de x = 200, on peut dire que l'information selon laquelle la donnée (objet) de 200 est à l'adresse xxxx de la variable x est transmise.
Alors quelle est la valeur passant d'une référence ...
** Transmettez l'emplacement des données nouvellement créées (objet) **
Vous devriez pouvoir dire ...
C'est là que la méthode destructrice sort
destroy_method.rb
#Substitution
p story = "bakemonogatari"
#Substitution d'affectation
x = story
#Passer à une méthode destructive
p story.upcase!
#Tout sera pareil
p story
p x
p "##################################"
#Substitution
p story_two = "tukimonogatari"
#Substitution d'affectation
y = story_two
#Passer aux méthodes non destructives
p story_two.upcase
#Non affecté par la méthode upcase
p story_two
p y
Résultat de sortie
"bakemonogatari"
"BAKEMONOGATARI"
"BAKEMONOGATARI"
"BAKEMONOGATARI"
"##################################"
"tukimonogatari"
"TUKIMONOGATARI"
"tukimonogatari"
"tukimonogatari"
!! Si vous ajoutez, cela devient une méthode destructrice. Destructif signifie avoir la possibilité d'éditer des objets. Depuis que je l'ai modifié pour afficher l'emplacement de l'objet nouvellement créé, l'histoire et x font référence à l'emplacement de la valeur de l'objet nouvellement créé, je mets donc la chaîne en majuscule.
Au contraire, la méthode non destructive ne semble pas être affectée par la méthode upcase car elle ne passe pas la partie référence du nouvel objet même si un nouvel objet est créé.
object_id.rb
#Substitution
p story = "bakemonogatari"
#Substitution d'affectation
x = story
#Passer à une méthode destructive
p story.upcase!.object_id
#Tout sera pareil
p story.object_id
p x.object_id
p "##################################"
#Substitution
p story_two = "tukimonogatari"
#Substitution d'affectation
y = story_two
#Passer aux méthodes non destructives
p story_two.upcase.object_id
#Non affecté par la méthode upcase
p story_two.object_id
p y.object_id
Résultat de sortie
#Tous les mêmes identifiants
"bakemonogatari"
70291624072300
70291624072300
70291624072300
"##################################"
#ID d'objet différent uniquement pour celui recréé
"tukimonogatari"
70291624071720
70291624071800
70291624071800
Il existe une différence dans l'ID d'objet entre destructif et non destructif.
C'est compliqué, mais je pense que j'en ai finalement fait une langue. Veuillez signaler si vous faites une erreur.
Recommended Posts