2013-07-25 9 views
10

Ich habe eine Instanz o der Klasse O. Ich würde gerne wissen, was o kann.Liste der Instanzmethoden der aktuellen Klasse nur

o.methods wird mir viele Methoden geben. Also mache ich normalerweise o.methods - Object.instance_methods. Aber das ist nicht prägnant.

Ich möchte etwas wie o.methods - o.class.superclass.instance_methods tun. Das heißt, nur die in O definierten Methoden selbst.

Gibt es einen anderen Weg?

+2

Ist 'o.methods (false)' Arbeit? –

+2

@SergioTulentsev Nein, das würde nicht funktionieren, weil die Bedeutung des 'false'-Arguments für 'methods' darin besteht, nur Singleton-Methoden aufzuführen, z. ''foo'.methods (false) # => []'. – toro2k

Antwort

15

Sie die Methode verwenden können Module#instance_methods:

o.class.instance_methods(false) 


Warnung Die Dokumentation falsch zu sein scheint, heißt es, dass:

Ohne Argument oder mit einem Argument das ist falsch, die Instanz Methoden in Mod zurückgegeben werden, sonst die Methoden in Mod und Mod Superklassen werden zurückgegeben.

Aber eigentlich der Parameter ist standardmäßig true:

String.instance_methods.size 
# => 184 
String.instance_methods(false).size 
# => 130 
Verwandte Themen