[RUBY] Symboles et rubis destructeur

Comment écrire ruby

Cette fois, nous verbaliserons les symboles et les méthodes destructrices.

À propos des symboles

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)

Méthode destructrice

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.

Résumé

C'est compliqué, mais je pense que j'en ai finalement fait une langue. Veuillez signaler si vous faites une erreur.

Recommended Posts

Symboles et rubis destructeur
À propos des hachages et symboles Ruby
À propos des symboles Ruby
À propos des symboles Ruby
Rubis et gemme
Résumé des hachages et symboles dans Ruby
Différence entre les chaînes de caractères et les symboles Ruby [Débutant]
[Ruby] Classes et instances
[Ruby] Big Decimal et DECIMAL
Classes et instances Ruby
Héritage et délégation Ruby
Erreurs de syntaxe et contre-mesures Ruby
Extension Ruby C et volatile
Résumer l'injection de rubis et de dépendances
À propos de Ruby, modèle objet
[Ruby] Méthodes singulières et classes singulières
À propos des classes et des instances Ruby
Méthodes et classes Ruby (basiques)
Création de classes et d'instances Ruby
[Ruby] Différence entre obtenir et publier
[Ruby] Différence entre is_a? Et instance_of?
Entrée standard Ruby et diverses méthodes
À propos des guillemets simples et doubles Ruby
[Bases de Ruby] méthode split et méthode to_s
À propos de l'opérateur de produit Ruby (&) et de l'opérateur somme (|)
Ecrire des clés et des valeurs dans Ruby
[Super Introduction] À propos des symboles dans Ruby
Les tableaux, les hachages et les symboles de Ruby sont déroutants, alors je les ai résumés.
Mise à niveau de la version du projet Ruby and Rails
À propos de l'héritage orienté objet et du rendement Ruby
Mettre à niveau et changer de version de Ruby sous Windows 10
Remarque: Différence entre Ruby "p" et "met"
Faire un tri à bulles et sélectionner le tri avec Ruby
Différence entre la variable d'instance Ruby et la variable locale
[Rubiy] Simplifiez chaque utilisation de la carte et injectez
Explication des objets Ruby Time et Date
[Ruby] Distinction et utilisation des boucles dans Ruby
Différence entre "|| =" et "instance_variable_defined?" Dans Ruby memo
[Facile] Comment mettre à niveau Ruby et le bundler
Comparaison des objets JavaScript et des classes Ruby
Écrire du code à l'aide de classes et d'instances Ruby
[Ruby] Différence entre print, put et p
Conversion de JSON en TSV et TSV en JSON avec Ruby