[RUBY] Symbole und zerstörerischer Rubin

Wie schreibe ich Ruby

Dieses Mal werden wir Symbole und destruktive Methoden verbalisieren.

Über Symbole

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)

Zerstörerische Methode

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.

Zusammenfassung

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

Symbole und zerstörerischer Rubin
Über Ruby-Hashes und -Symbole
Über Ruby-Symbole
Über Ruby-Symbole
Rubin und Edelstein
Zusammenfassung der Hashes und Symbole in Ruby
Unterschied zwischen Ruby-Zeichenketten und Symbolen [Anfänger]
[Ruby] Klassen und Instanzen
[Ruby] Big Decimal und DECIMAL
Ruby-Klassen und -Instanzen
Ruby-Vererbung und -Delegierung
Ruby-Syntaxfehler und Gegenmaßnahmen
Ruby C Erweiterung und flüchtig
Fassen Sie Ruby und Dependency Injection zusammen
Über Ruby und Objektmodell
[Ruby] Singuläre Methoden und singuläre Klassen
Informationen zu Ruby-Klassen und -Instanzen
Ruby-Methoden und -Klassen (grundlegend)
Erstellen von Ruby-Klassen und -Instanzen
[Ruby] Unterschied zwischen get und post
[Ruby] Unterschied zwischen is_a? Und instance_of?
Ruby-Standardeingabe und verschiedene Methoden
Über Ruby einfache Anführungszeichen und doppelte Anführungszeichen
[Ruby-Grundlagen] Split-Methode und to_s-Methode
Informationen zum Ruby-Produktoperator (&) und zum Summenoperator (|)
Schreiben Sie Schlüssel und Werte in Ruby
[Super Einführung] Über Symbole in Ruby
Rubys Arrays, Hashes und Symbole sind verwirrend, deshalb habe ich sie zusammengefasst.
Upgrade der Ruby- und Rails-Version des Projekts
Über objektorientierte Vererbung und über Ertrag Ruby
Aktualisieren und wechseln Sie Ruby-Versionen unter Windows 10
Hinweis: Unterschied zwischen Ruby "p" und "Puts"
Blasensortierung durchführen und mit Ruby sortieren auswählen
Unterschied zwischen Ruby-Instanzvariable und lokaler Variable
[Rubiy] Vereinfache jedes mit Map und Inject
Erläuterung der Ruby Time- und Date-Objekte
[Ruby] Schleifenunterscheidung und Verwendung in Ruby
Unterschied zwischen "|| =" und "instance_variable_defined?" Im Ruby-Memo
[Einfach] So aktualisieren Sie Ruby und Bundler
Vergleich von JavaScript-Objekten und Ruby-Klassen
Schreiben Sie Code mit Ruby-Klassen und -Instanzen
[Ruby] Unterschied zwischen print, put und p
Konvertieren Sie mit Ruby von JSON nach TSV und von TSV nach JSON