Wie kann die Klasse bestimmt werden, von der eine bestimmte Methode stammt?

7

Ich habe diese Frage von dieser Diskussion bekommen. Ein Methodenaufruf wie object.m bedeutet nicht immer, dass die Klasse von "object" eine "m" -Methode hat, genauso wie die find-Methode für ein Array-Objekt nicht direkt vom Array-Objekt, sondern vom eingemischten Enumerable-Modul stammt. Meine Frage ist, wie können wir anhand einer Methode die Klasse bestimmen, aus der die Methode stammt?

    
eric2323223 22.01.2009, 03:30
quelle

5 Antworten

10

Jede Klassen- / Objektmethode ist ein Objekt in Ruby und besitzt einige eigene Methoden.

So können Sie das tun:

%Vor%

Schnelles bisschen RegEx und du bist fertig.

    
Toby Hede 22.01.2009, 06:28
quelle
7

tobyhede's Antwort ist genial, aber ich habe nur ein bisschen in irb gegraben und es ist nicht nötig, die Ausgabe von #inspect zu teilen. Die Klasse Method

%Vor%

hat einige nützliche Methoden:

%Vor%

Insbesondere die Methode #owner , die den Eigentümer als korrektes Objekt zurückgibt:

%Vor%     
ben_h 01.02.2009 11:57
quelle
1

vielleicht verwenden Sie caller (), um Ihnen das Backtrace zu geben, siehe:

Ссылка

    
Greg Fairbrother 22.01.2009 06:11
quelle
1

Ich denke, so etwas könnte funktionieren

%Vor%

Ich nehme an, der letzte, der die Methode hat, ist derjenige, der sie definiert?

    
dylanfm 22.01.2009 06:25
quelle
0

Ich bin mir nicht sicher, ob wir genau herausfinden können, woher eine Methode kommt. Wenn Sie ein Mix-In hinzufügen, werden alle Methoden Teil Ihrer Klasse, als ob Sie sie dort abgelegt hätten. Siehe Antwort von dylanfm für ca.

    
Keltia 22.01.2009 06:27
quelle

Tags und Links