2013-07-25 13 views
10

Ho un'istanzadella classe O. Mi piacerebbe sapere cosa è capace di o.Elenco dei metodi di istanza della classe corrente solo

o.methods mi darà molti metodi. Quindi di solito faccio o.methods - Object.instance_methods. Ma non è conciso.

Voglio fare qualcosa come o.methods - o.class.superclass.instance_methods. Cioè, solo i metodi definiti nello stesso O.

C'è un altro modo?

+2

Fa 'o.methods (false)' lavoro? –

+2

@SergioTulentsev No, non funzionerebbe, perché il significato dell'argomento 'false' su' methods' è elencare solo i metodi singleton, es. ''foo'.methods (false) # => []'. – toro2k

risposta

15

È possibile utilizzare il metodo Module#instance_methods:

o.class.instance_methods(false) 


Attenzione La documentazione sembra essere sbagliato, si dice che:

Senza argomenti, o con un argomento questo è falso, i metodi di istanza in mod vengono restituiti, altrimenti i metodi in mod e mod 01 Le superclassivengono restituite.

Ma in realtà il parametro di default è true:

String.instance_methods.size 
# => 184 
String.instance_methods(false).size 
# => 130 
Problemi correlati