Dieses Mal werden wir Symbole und destruktive Methoden verbalisieren.
Es sieht so aus, als gäbe es zu viele Symbole und Schreibstile, daher bin ich mir nicht sicher, was es ist. Der Doppelpunkt befand sich vor oder hinter ihm und alle schienen Symbole zu sein ... es gab kein Gefühl der Einheit. Dies liegt daran, dass der Code, den ich gelesen habe, auf verschiedene Arten geschrieben wurde und keiner der Vorzüge klar war.
Aber es war nicht so. Anstatt viele Möglichkeiten zum Schreiben von Symbolen zu haben, gab es viele Möglichkeiten zum Schreiben von Hashes.
** Symbol war nur eine Notation mit einem Doppelpunkt vor dem Namen **
:key
Das Obige ist das Symbol.
Ich war verwirrt, weil es 4 Schreibmuster gibt, wie unten gezeigt, und der Schreibstil, der wie ein Symbol aussieht, gemischt ist. Ein Missverständnis als Symbol führte zu einem langsamen Verständnis. Hoppla.
Es fühlt sich etwas seltsam an, auch auf Japanisch auf den Wert zugreifen zu können. Die Version von Ruby ist
ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin19]
ist.
various_hash.rb
#Gewöhnlicher Hash
nomal_hash = {
"Avdol" => "Magician's red",
"Igy" => "the fool",
}
nomal_hash_two = {
"Sorajo Shotaro" => "Stern Platin",
"Noriaki Kakyoin" => "Hierophant Green",
}
#Hash definiert mit Symbol als Schlüssel
symbol_hash = {
:Avdol => "Magician's red",
:Igy => "the fool",
}
symbol_hash_two = {
:Sorajo Shotaro=> "Stern Platin",
:Noriaki Kakyoin=> "Hierophant Green",
}
#Wenn das Symbol ein Schlüssel ist, kann es wie JSON abgekürzt werden
json_like_hash = {
"Avdol": "Magician's red",
"Igy": "the fool",
}
json_like_hash_two = {
"Sorajo Tarojo": "Stern Platin",
"Noriaki Kakyoin": "Hierophant Green",
}
#Keine Notwendigkeit für doppelte Anführungszeichen
#Dies entspricht der JavaScript-Objektnotation
no_double_quote_hash = {
Avdol: "Magician's red",
Igy: "the fool",
}
no_double_quote_hash_two = {
Sorajo Shotaro: "Stern Platin",
Noriaki Kakyoin: "Hierophant Green",
}
#Wie man auf jeden zugreift
#Normaler Hash verwendet einen String-Schlüssel
puts "Avdols Stand#{nomal_hash["Avdol"]}(String key)"
puts "Sorajo Shotaros Stand#{nomal_hash_two["Sorajo Shotaro"]}(String key)"
#Hashes aus Symbolen verwenden Symboltasten
puts "Avdols Stand#{symbol_hash[:Avdol]}(Symbolschlüssel)"
puts "Sorajo Shotaros Stand#{symbol_hash_two[:Sorajo Shotaro]}(Symbolschlüssel)"
#Der im Jason-Stil geschriebene Hash verwendet das Symbol auch als Schlüssel
puts "Igy steht#{json_like_hash[:Igy]}(Symbolschlüssel)"
puts "Der Stand von Noriaki Kakyoin#{json_like_hash_two[:Noriaki Kakyoin]}(Symbolschlüssel)"
#Hashes, für die keine Quarts erforderlich sind, verwenden auch Symbole als Schlüssel
puts "Igy steht#{no_double_quote_hash[:Igy]}Es ist ein Punkt (Symbolschlüssel)"
puts "Der Stand von Noriaki Kakyoin#{no_double_quote_hash_two[:Noriaki Kakyoin]}Es ist ein Punkt (Symbolschlüssel)"
Ausgabeergebnis
Avdols Stand ist Magier's rot (String-Taste)
Sorajo Shotaros Stand ist Star Platinum (Zeichenkettenschlüssel)
Avdols Stand ist Magier's rot (Symboltaste)
Sorajo Shotaros Stand ist Star Platinum (Symbolschlüssel)
Igys Stand ist der Narr (Symbolschlüssel)
Der Stand von Noriaki Kakyoin ist Hierophant Green (Symbolschlüssel)
Igys Stand ist der Narrenpunkt (Symbolschlüssel)
Noriaki Kakyoins Stand ist ein Hierophant Green Dot (Symbolschlüssel)
Verweise [Ruby] Referenzübergabe und destruktive Methoden
Es ist eine Geschichte von Wertübergabe, Referenzübergabe und Referenzübergabe. Die Geschichte der C-Sprachzeiger ist bekannt.
Wertübergabe bedeutet, die Daten (Objekt) selbst zu senden. Wenn x = 200 ist, bedeutet dies, dass die Daten (Objekt) von 200 selbst kopiert und übergeben werden.
Übergeben als Referenz bedeutet Übergeben der ** Variablenposition ** mit den Daten (Objekt), genau genommen der Adresse des Speichers, der für die ** Variable ** reserviert ist. Mit anderen Worten kann im Beispiel von x = 200 gesagt werden, dass die Information, dass sich die Daten (Objekt) von 200 an der xxxx-Adresse der Variablen x befinden, übergeben wird.
Was ist der Wert, der einer Referenz übergeben wird?
** Übergeben Sie den Speicherort der neu erstellten Daten (Objekt) **
Sie sollten sagen können ...
Hier kommt die destruktive Methode heraus
destroy_method.rb
#Auswechslung
p story = "bakemonogatari"
#Ersetzung der Abtretung
x = story
#Übergabe an eine destruktive Methode
p story.upcase!
#Alle werden gleich sein
p story
p x
p "##################################"
#Auswechslung
p story_two = "tukimonogatari"
#Ersetzung der Abtretung
y = story_two
#Übergabe an zerstörungsfreie Methode
p story_two.upcase
#Nicht von der Upcase-Methode betroffen
p story_two
p y
Ausgabeergebnis
"bakemonogatari"
"BAKEMONOGATARI"
"BAKEMONOGATARI"
"BAKEMONOGATARI"
"##################################"
"tukimonogatari"
"TUKIMONOGATARI"
"tukimonogatari"
"tukimonogatari"
!! Wenn Sie hinzufügen, wird es eine destruktive Methode. Destruktiv bedeutet, Objekte bearbeiten zu können. Da ich es so bearbeitet habe, dass die Position des neu erstellten Objekts angezeigt wird, beziehen sich sowohl story als auch x auf die Position des Werts des neu erstellten Objekts. Daher setze ich die großgeschriebene Zeichenfolge.
Im Gegenteil, die zerstörungsfreie Methode scheint von der upcase-Methode nicht betroffen zu sein, da sie den Referenzteil des neuen Objekts nicht übergibt, selbst wenn ein neues Objekt erstellt wird.
object_id.rb
#Auswechslung
p story = "bakemonogatari"
#Ersetzung der Abtretung
x = story
#Übergabe an eine destruktive Methode
p story.upcase!.object_id
#Alle werden gleich sein
p story.object_id
p x.object_id
p "##################################"
#Auswechslung
p story_two = "tukimonogatari"
#Ersetzung der Abtretung
y = story_two
#Übergabe an zerstörungsfreie Methode
p story_two.upcase.object_id
#Nicht von der Upcase-Methode betroffen
p story_two.object_id
p y.object_id
Ausgabeergebnis
#Alle die gleiche ID
"bakemonogatari"
70291624072300
70291624072300
70291624072300
"##################################"
#Objekt-ID, die sich nur für die neu erstellte unterscheidet
"tukimonogatari"
70291624071720
70291624071800
70291624071800
Es gibt einen Unterschied in der Objekt-ID zwischen destruktiv und zerstörungsfrei.
Es ist kompliziert, aber ich denke, ich habe es endlich zu einer Sprache gemacht. Bitte weisen Sie darauf hin, wenn Sie einen Fehler machen.
Recommended Posts