0Pricing
Ruby Academy · Lektion

prepend und Methodenauflösung

Vererbungsketten

prepend und Methodenauflösung ist eine kostenlose Ruby Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Ruby Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Ruby Academy-Kurs umfasst insgesamt 4 Lektionen.

Ahnenketten

Wenn Sie eine Methode aufrufen, durchsucht Ruby eine Liste, die als Ahnenkette bezeichnet wird. Die erste passende Definition wird verwendet. Wenn Sie diese Kette verstehen, wird klar, wie Mixins und Vererbung zusammenspielen.

class Animal; end
class Dog < Animal; end
p Dog.ancestors

Reihenfolge der Methodensuche

Ruby sucht zuerst in der Klasse des Objekts, dann in den eingebundenen Modulen, anschließend in der Oberklasse und so weiter entlang der Kette, bis die Methode gefunden wird.

module M
  def hello; "from module"; end
end
class C
  include M
  def hello; "from class"; end
end
puts C.new.hello

include steht unterhalb der Klasse

Ein per include eingebundenes Modul steht in der Kette direkt unterhalb der Klasse. Die eigenen Methoden der Klasse haben Vorrang vor denen des Moduls.

module M; end
class C
  include M
end
p C.ancestors  # [C, M, Object, ...]

prepend kennenlernen

prepend fügt ein Modul in der Kette oberhalb der Klasse ein. Dadurch werden die Methoden des Moduls zuerst gefunden, noch vor den eigenen Methoden der Klasse.

module M
  def hello; "from module"; end
end
class C
  prepend M
  def hello; "from class"; end
end
puts C.new.hello

prepend in der Kette

Untersuchen Sie die Vorfahren, um zu sehen, dass prepend das Modul vor der Klasse platziert.

module M; end
class C
  prepend M
end
p C.ancestors  # [M, C, Object, ...]

super aus einem per prepend eingebundenen Modul

Da das vorangestellte Modul zuerst ausgeführt wird, kann es die Klassenmethode umschließen, indem es mit super das Original aufruft. Das eignet sich ideal zum Dekorieren von Verhalten.

module Logged
  def save
    puts "before save"
    result = super
    puts "after save"
    result
  end
end
class Record
  prepend Logged
  def save
    puts "saving record"
    :ok
  end
end
p Record.new.save

super in Mixins

super folgt der Ahnenkette. Aus einem eingebundenen Modul erreicht super die Oberklasse; aus einem vorangestellten Modul erreicht es die Klasse selbst.

module Polite
  def greet; "Hi! " + super; end
end
class Person
  prepend Polite
  def greet; "I am here."; end
end
puts Person.new.greet

Umschließen ohne Bearbeitung

Mit prepend können Sie bestehende Methoden um zusätzliches Verhalten ergänzen, ohne den ursprünglichen Klassencode zu ändern. Das ist eine saubere Alternative zum Monkey-Patching.

module Timing
  def compute(n)
    puts "start"
    super
  end
end
class Calc
  prepend Timing
  def compute(n); n * n; end
end
puts Calc.new.compute(5)

Reihenfolge mehrerer Module

Wenn mehrere Module eingebunden werden, steht das zuletzt eingebundene Modul der Klasse am nächsten und wird zuerst durchsucht.

module A; def who; "A"; end; end
module B; def who; "B"; end; end
class C
  include A
  include B
end
puts C.new.who  # B wins (included last)
p C.ancestors

Zusammenfassung: include und prepend

Direkt gegenübergestellt:

  • include M: Die Kette lautet [Class, M, ...] — Methoden der Klasse haben Vorrang.
  • prepend M: Die Kette lautet [M, Class, ...] — Methoden des Moduls haben Vorrang und können mit super in die Klasse gelangen.
module M; end
class Inc; include M; end
class Pre; prepend M; end
p Inc.ancestors
p Pre.ancestors

Alles zusammenführen

Die Methodenauflösung folgt der Ahnenkette:

  • Klassenmethoden haben Vorrang vor eingebundenen Modulen.
  • Vorangestellte Module haben Vorrang vor der Klasse.
  • super geht in der Kette einen Schritt nach oben.
module Cap
  def name; super.capitalize; end
end
class User
  prepend Cap
  def name; "ada"; end
end
puts User.new.name

Kurzer Test

Testen Sie Ihr Verständnis der Methodenauflösung.

Zusammenfassung

Sie haben die Methodenauflösung kennengelernt:

  • Ruby durchsucht die Ahnenkette von oben nach unten.
  • include steht unterhalb der Klasse, prepend oberhalb.
  • super erreicht die nächste Definition weiter oben in der Kette.
  • prepend kann Methoden sauber umschließen.
module Loud
  def speak; super.upcase; end
end
class Bot
  prepend Loud
  def speak; "beep"; end
end
puts Bot.new.speak

Häufig gestellte Fragen

Ist die Lektion „prepend und Methodenauflösung“ kostenlos?

Ja — der vollständige Text von „prepend und Methodenauflösung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Ruby Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Ruby Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „prepend und Methodenauflösung“?

Vererbungsketten Du übst Ruby Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Ruby Academy zu starten?

Keine Vorkenntnisse erforderlich. Ruby Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „prepend und Methodenauflösung“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Ruby Academy-Lektion Code schreiben und ausführen?

Ja. Jede Ruby Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Module definieren
  2. include und extend
  3. Comparable und Enumerable
  4. prepend und Methodenauflösung
← Zurück zu Ruby Academy