Alle durch 'attr_accessor' definierten Variablen erhalten, ohne 'attr_accessor' zu überschreiben

8

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?

    
n_x_l 23.12.2015, 15:42
quelle

2 Antworten

6

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 .

    
Jesse Sielaff 23.12.2015 17:01
quelle
0

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

erstellt wurden     
maniacalrobot 23.12.2015 15:47
quelle

Tags und Links