2013-07-25 10 views
10

Mam instancję o klasy O. Chciałbym wiedzieć, do czego zdolny jest o.Lista metod instancji aktualnej klasy tylko

o.methods da mi wiele metod. Więc zwykle robię o.methods - Object.instance_methods. Ale to nie jest zwięzłe.

Chcę zrobić coś takiego, jak o.methods - o.class.superclass.instance_methods. To znaczy, same metody zdefiniowane w O.

Czy jest jakiś inny sposób?

+2

Czy 'o.methods (false)' praca? –

+2

@SergioTulentsev Nie, to by nie działało, ponieważ znaczenie "fałszywego" argumentu dla "metod" polega na wyliczaniu tylko pojedynczych metod, np. '' foo'.methods (false) # => [] '. – toro2k

Odpowiedz

15

Można użyć metody Module#instance_methods:

o.class.instance_methods(false) 


Warning Dokumentacja wydaje się być źle, to mówi, że:

Z żadnym argumentem lub z argumentem to jest fałsz, instancja metody w mod są zwracane, w przeciwnym razie metody w mod i mod's nadklasy są zwracane.

Ale faktycznie parametr domyślnie jest true:

String.instance_methods.size 
# => 184 
String.instance_methods(false).size 
# => 130 
Powiązane problemy