Ich setze einen Trace-Code in meinem Programm und würde gerne wissen, welche Methoden durch attr_accessor
definiert sind. Mit TracePoint
kann ich erkennen, wenn attr_accessor
aufgerufen wird, aber ich weiß nicht, wie ich es bekommen soll, um mir die Argumente mitzuteilen, die es erhalten hat. Irgendwelche Ideen?
Im Fragetitel haben Sie nach einer Liste von Variablen gefragt, die aber den Fragenkörper beantwortet, der nach einer Liste der definierten Methoden gefragt hat.
Diese Methode überprüft nicht die Instanzvariablen, bei denen Rauschen auftritt, wenn Sie mit der manuellen Aktualisierung oder dem Erstellen anderer Instanzvariablen beginnen.
%Vor% Ich habe die Methodennamen in der Konstante Methods
gespeichert, aber natürlich können Sie sie dort speichern, wo es für Sie am bequemsten ist.
Das Definieren / Entfernen von method_added
in MethodTracer
stellt sicher, dass Sie keine Foo.method_added
, die Sie selbst definiert haben, überlisten. Diese Methode erfordert jedoch, dass, wenn Sie Foo.method_added
vor Ihren Aufrufen von attr_accessor
definieren, Sie super
darin aufrufen müssen. Andernfalls überspringen Sie die temporäre method_added
definiert durch MethodTracer
.
Sie können obj.methods()
verwenden, um alle verfügbaren Methoden für die Instanz zu finden (inc-Methoden von superclasses), und obj.methods(false)
, um nur die Methode zu erhalten, die für das aktuelle singleton-Objekt definiert ist. Ich bin mir nicht sicher, ob es möglich ist zu erkennen, ob diese Methoden über attr_accessor
obwohl
Tags und Links ruby metaprogramming