Ruby - Methodenherkunft bestimmen?

Wenn eine Nachricht gesendet wird, sucht ein Ruby-Objekt, ob es eine Methode mit diesem Namen hat, mit der es antworten kann. Die Methodensuche sucht in der folgenden Reihenfolge und verwendet die erste gefundene Methode.

Singleton-Methoden, die für sich selbst definiert sind (aka Methoden für seine "Eigenklasse")Methods definiert in seiner Klasse Alle Module, die in umgekehrter Reihenfolge der Einbeziehung in ihre Klasse eingemischt wurden (nur die früheste Einbeziehung eines bestimmten Moduls hat Auswirkungen - wenn die Oberklasse Modul A enthält und die Unterklasse es erneut enthält, wird sie in der Unterklasse ignoriert; wenn die Unterklasse enthält A dann B dann A, das zweite A wird ignoriert) aktualisiere: beachte, dass dies vor @ geschrieben wurModule.prepend existierte)Ihre ElternklasseAlle Methoden, die in die übergeordnete Klasse, die übergeordnete Klasse usw. gemischt sind.

Oder, um es einfacher auszudrücken, es schaut auf sich selbst, dann alles inself.class.ancestors in der Reihenfolge, in der sie aufgelistet sind.

Dieser Suchpfad wird zum Zeitpunkt des Methodenaufrufs befolgt. Wenn Sie eine Instanz einer Klasse erstellen, die Klasse erneut öffnen und eine Methode hinzufügen oder über ein Modul einmischen, erhält die vorhandene Instanz Zugriff auf diese Methode.

Wenn dies alles fehlschlägt, wird geprüft, ob ein @ vorhanden ismethod_missing -Methode oder, falls dies die Klasse tut, die übergeordnete Klasse usw.

Meine Frage lautet:neben der Prüfung des Codes von Hand oder mit Beispielmethoden wieputs "I'm on module A!", können Sie feststellen, woher eine bestimmte Methode stammt? Können Sie zum Beispiel die Methoden eines Objekts auflisten und sehen, "diese befindet sich in der übergeordneten Klasse, diese befindet sich in Modul A, diese befindet sich in der Klasse und überschreibt die übergeordnete Klasse," etc?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage