Wenn Sie einem Argument in einer Ruby-Methode neu zuweisen und dann "super" aufrufen → Das neu zugewiesene wird verwendet

[^ zuweisen]: Wenn Sie nur eine destruktive Methode anstelle einer Zuweisung ausführen, sind das ursprüngliche und das neue Objekt identisch, sodass diese Frage nicht in Frage kommt.

Ich habe es nicht verstanden, also habe ich ein Experiment versucht.

class Foo
	def mtd(str)
		puts "[Foo:1] str => %p (%#08x)" % [str, str.__id__]
	end
end

class Bar < Foo
	def mtd(str)
		puts "[Bar:1] str => %p (%#08x)" % [str, str.__id__]
		str *= 2
		puts "[Bar:2] str => %p (%#08x)" % [str, str.__id__]
		super
	end
end

Bar.new.mtd("abc")

Ergebnis


[Bar:1] str => "abc" (0x00003c)       <--Das ursprüngliche Objekt wurde an das formale Argument übergeben
[Bar:2] str => "abcabc" (0x000050)    <--Objekt durch Neuzuweisung überschrieben (andere ID)
[Foo:1] str => "abcabc" (0x000050)    <--Ergebnis: Überschrieben wird verwendet

Wenn Sie nur "super" schreiben, ergänzt dies das Gefühl von "super (str)". Daher ist es besser, eine Neuzuweisung vorzunehmen.

Nur für den Fall, als ich mir das Referenzhandbuch ansah, war es fest in ** Beispielcode ** geschrieben .. (Es ist schwierig, weil es als eine der Erklärungen in Sätzen interpretiert werden kann)

Recommended Posts

Wenn Sie einem Argument in einer Ruby-Methode neu zuweisen und dann "super" aufrufen → Das neu zugewiesene wird verwendet
So geben Sie den Wert aus, wenn sich ein Array im Array befindet
Wirf eine Ausnahme und fange, wenn es keinen Handler gibt, der dem Pfad im Frühjahr entspricht
Ich möchte das Argument der Annotation und das Argument der aufrufenden Methode an den Aspekt übergeben
So verweisen Sie auf eine Spalte, wenn Sie die Spaltennamensmethode in ActiveRecord überschreiben
[Rubiy] Ich möchte mit der Split-Methode ein Array aus einer Zeichenfolge erstellen. Und umgekehrt.
So überprüfen Sie, ob eine Instanzvariable in einer Ruby-Klasse definiert ist
Ursache ist nicht sichtbar, wenn Methoden anderer Klassen in Java aufgerufen werden
So verspotten Sie einen Super-Methodenaufruf in PowerMock
So führen Sie einen bestimmten Vorgang aus, wenn die Zurück-Taste im Android-Fragment gedrückt wird
[Ruby] Gewöhnen Sie sich an, beim Erstellen einer Kopie einer Zeichenfolgenvariablen die dup-Methode zu verwenden
So geben Sie ein Array für den Rückgabewert / das Rückgabeargument einer Methode in der CORBA IDL-Datei an
So lösen Sie das Problem, wenn der Wert nicht gesendet wird, wenn das Formular in Schienen deaktiviert und gesendet wird
[Schienen] Was tun, wenn die Ansicht zusammenbricht, wenn eine Nachricht mit der Fehlermethode angezeigt wird?
Java learning_Behavior, wenn ein Feld mit demselben Namen und eine Methode mit demselben Namen in zwei Klassen in einer Vererbungsbeziehung vorhanden sind
[Ruby] Zähle eine gerade Zahl in einem Array mit der geraden? -Methode
So ändern Sie eine Zeichenfolge in einem Array in eine Zahl in Ruby
Ich möchte eine Methode aufrufen und die Nummer zählen
So rufen Sie den Hashwert in einem Array in Ruby ab
Erstellen Sie eine Methode, um den Steuersatz in Java zurückzugeben
Was ist der Unterschied zwischen einer Aktion und einer Instanzmethode?
Affen-Patch, um die aktuelle Zeit zurückzugeben, wenn in Time.parse of Ruby eine leere Zeichenfolge angegeben ist
Informationen zur Methode zum Konvertieren einer Zeichenfolge in eine Ganzzahl / einen Bruch (Umwandlungsdaten) in Java
Einstellungen, die vorgenommen werden müssen, wenn HTML oder JSP in Eclipse formatiert sind und das Layout enttäuschend wird
[Java] So suchen Sie mit der Methode includes nach Werten in einem Array (oder einer Liste)
Wenn Sie eine Methode in RSpec verspotten möchten, sollten Sie die Methode allow für mock und die Singleton-Methode verwenden.
Speicherort der Methodendefinition Zusammenfassung der zu überprüfenden Informationen Wenn im Projekt und in Rails / Gem definiert
Was tun, wenn javax.el.ELException: Kein gültiger Methodenausdruck: wird angezeigt, wenn der JSF-Bildschirm angezeigt wird
Was tun, wenn in einer Lightweight-JRE eine UnsupportedCharsetException auftritt?
[Ruby] Beziehung zwischen Elternklasse und Kinderklasse. Beziehung zwischen Klasse und Instanz.
[Ruby] Hat Hash # has_key einen Schritt näher an den veralteten Beamten?
[jOOQ] Wie in der WHERE / AND / OR-Klausel WANN FALLEN
Wie installiere ich die in Ubuntu verwendete Sprache und wie erstelle ich die Umgebung?
Speichern der im Textbereich eingegebenen Informationen in einer Variablen in der Methode
Dinge, an die Sie sich erinnern sollten, und Konzepte im Ruby on Rails-Tutorial
Der Unterschied zwischen der Ruby-Instanzmethode und der Klassenmethode ist leicht zu verstehen.
Erstellen einer ArrayList, mit der Sie die Koordinaten einer zweidimensionalen Ebene eingeben und abrufen können
Es wurde ein Fehler behoben, der beim Versuch auftrat, Spark in einer Umgebung zu verwenden, in der Java 8 und Java 11 gleichzeitig vorhanden sind
[Ruby On Rails] Notfallmaßnahmen, wenn redirect_to action :: show nicht zum Erstellen von Aktionen und zum Zerstören von Aktionen verwendet werden kann (kann)
Wie man IGV mit Socket-Kommunikation bedient und wie man einen Ruby Gem mit dieser Methode herstellt
Was tun, wenn der Vorgang nicht zulässig ist, wenn ein Befehl im Terminal ausgeführt wird?
[Swift] Vielmehr ist es sinnvoll, var zu vermeiden und nur dann mit let zu deklarieren, wenn die Zuweisung des Anfangswertes einen Zweig enthält.