Benennen und rufen Sie in Ruby übergeordnete Klassenmethoden explizit auf

Nachdruck aus Blog-Artikel.

Rufen Sie eine eigene übergeordnete Methode auf

Sie können "super" verwenden, um eine übergeordnete Methode mit demselben Namen wie sich selbst aufzurufen.

  def value
    "Super#value"
  end
end

class Sub < Super
  def value
    # Super#Wert aufrufen
    super
  end
end

p Sub.new.value
# => "Super#value"

Was ist, wenn Sie eine beliebige übergeordnete Methode von einer anderen Methode aufrufen möchten?

class Super
  def value
    "Super#value"
  end
end

class Sub < Super
  def value
    "Sub#value"
  end

  def value2
    #Hier super#Ich möchte Wert nennen
  end
end

Antwort: Verwenden Sie Method # super_method

In diesem Fall können Sie Method # super_method verwenden. Rufen Sie ein beliebiges Methodenobjekt wie folgt ab und verwenden Sie "# super_method", um das übergeordnete Methodenobjekt abzurufen.

class Super
  def value
    "Super#value"
  end
end

class Sub < Super
  def value
    "Sub#value"
  end

  def value2
    #Holen Sie sich ein Methodenobjekt mit Wert und verweisen Sie auf die übergeordnete Methode
    method(:value).super_method.call
  end
end

p Sub.new.value2
# => "Super#value"

Bonus

Sie können auch .instance_method verwenden, um eine Methode einer beliebigen Klasse aufzurufen, wie unten gezeigt.

class Super
  def value
    "Super#value"
  end
end

class Sub < Super
  def value
    "Sub#value"
  end

  def value2
    Super.instance_method(:value).bind(self).call
  end
end

p Sub.new.value2
# => "Super#value"

Recommended Posts

Benennen und rufen Sie in Ruby übergeordnete Klassenmethoden explizit auf
Ich habe versucht, ein übergeordnetes Wertklasseobjekt in Ruby zu erstellen
Ruft den Klassennamen und den Methodennamen des Controllers ab, der vom HandlerInterceptor von Spring Boot ausgeführt wird
Ich möchte eine Methode einer anderen Klasse aufrufen
super ruft nicht nur die Methoden der übergeordneten Klasse auf
[Ruby / Rails] Legen Sie einen eindeutigen (eindeutigen) Wert in der Klasse fest
[Java] Ganzzahlige Informationen von Zeichen in der Textdatei, die mit der Methode read () erfasst wurden
Schreiben Sie einen Test, indem Sie die Geschichte von Mr. Nabeats in der Welt mit Rubin umsetzen
Temporäres Support-Memo, wenn der Name des Methodenparameters der Java-Klasse nicht durch Reflektion im Eclipse-Plug-In-Projekt abgerufen werden kann
So erhalten Sie den Namen einer Klasse / Methode, die in Java ausgeführt wird
[Ruby] Gewöhnen Sie sich an, beim Erstellen einer Kopie einer Zeichenfolgenvariablen die dup-Methode zu verwenden
Rufen Sie die Super-Methode in Java auf
[Ruby] Beziehung zwischen Elternklasse und Kinderklasse. Beziehung zwischen Klasse und Instanz.
Erstellen Sie einen Kalender aus der Kalenderklasse, indem Sie das Jahr und den Monat angeben
Ich habe den Paketnamen überprüft, auf den die in der JAR-Datei enthaltene Klasse verweist
Nach mehreren Feldern in der Klasse sortieren
So verweisen Sie auf eine Spalte, wenn Sie die Spaltennamensmethode in ActiveRecord überschreiben
Ein Teil der Klasse, der von der zu testenden Klasse im JMockit Mock-Methodenmemo aufgerufen wurde
Rufen Sie den in der Controller-Klasse von Spring Boot definierten Pfad als Liste ab
Ursache ist nicht sichtbar, wenn Methoden anderer Klassen in Java aufgerufen werden
[Bestellmethode] Legen Sie die Reihenfolge der Daten in Rails fest
[Ruby] Zusammenfassung der Klassendefinitionen. Beherrsche die Grundlagen.
Verhindern von Fehlern im Logger-Namen durch Kopieren
[Java] Behandlung von Java Beans in der Methodenkette
[Java] Dynamischer Methodenaufruf durch Reflektion des Aufzählungstyps (Aufzählung)
Java-Methodenaufruf von RPG (Methodenaufruf in eigener Klasse)
Messen Sie die Größe eines Ordners mit Java
Empfehlung der Serviceklasse in Ruby on Rails
Ein kurzer Überblick über Java, das im Unterricht gelernt wurde
Methodenname der Methodenkette in Java Builder + α
So erhalten Sie den Klassennamen des Arguments von LoggerFactory.getLogger, wenn Sie SLF4J in Java verwenden
Zählen Sie die Häufigkeit des Auftretens von Wörtern in einem Satz durch Stream-Verarbeitung (Apache Apex).
Eine Überprüfung des von Rails-Anfängern verwendeten Codes
[Ruby] Schneiden Sie eine Zeichenfolge mit der Slice-Methode aus
Format der Protokollausgabe von Tomcat selbst in Tomcat 8
[Kotlin] Ermittelt den Argumentnamen des Konstruktors durch Reflektion
[Ruby] Die Rolle von Indizes beim Lernen von Elementen in Arrays
Untersuchen Sie die Elemente im Array mit der Methode [Ruby] include?
Schreiben Sie eine Klasse in Kotlin und nennen Sie sie in Java
Berechnen Sie die Differenz zwischen Zahlen in einem Ruby-Array
So verspotten Sie einen Super-Methodenaufruf in PowerMock
Ein kurzer Überblick über Java, das in Klasse 3 gelernt wurde
Ruby, Nokogiri: Ruft den Elementnamen des ausgewählten Knotens ab
Ein kurzer Überblick über Java, das in Klasse 2 gelernt wurde
[Ruby] Klassenverschachtelung, Vererbung und die Grundlagen des Selbst
Rufen Sie die URL des HTTP-Umleitungsziels in Ruby ab
Warum die get-Methode in der Calendar-Klasse benötigt wird
Fassen Sie die zusätzlichen Elemente der optionalen Klasse in Java 9 zusammen
[Ruby] Denken, wenn sich vor der Methode kein Empfänger befindet (wie es aussieht)
wsimport-Fehlerbehandlung (Eine Klasse / Schnittstelle mit dem gleichen Namen "xxx" wird bereits verwendet)
Definition der Rubinmethode
[Ruby] Zähle eine gerade Zahl in einem Array mit der geraden? -Methode