2013-07-25 16 views
10

私はOのインスタンスoを持っています。私はoが可能であることを知りたいです。現在のクラスのインスタンスメソッドのリスト

o.methods私には多くの方法があります。だから私は通常o.methods - Object.instance_methodsをやる。しかしそれは簡潔ではない。

o.methods - o.class.superclass.instance_methodsのような処理をしたいです。つまり、Oで定義されているメソッドだけです。

他にもいくつかの方法がありますか?

+2

'o.methods(偽)は'動作しますか? –

+2

@SergioTulentsevいいえ、それはうまくいきません。なぜなら、 'methods'の' false'引数の意味は、シングルトンメソッドだけをリストすることです。 '' foo'.methods(false)#=> [] ' – toro2k

答えて

15

あなたは方法Module#instance_methods使用することができます:引数と引数なし、または

ドキュメントを警告

o.class.instance_methods(false) 


が間違っているようですが、それはと言いますつまり、偽の場合、インスタンス のmodが返されます。そうでない場合、modとmodのメソッド スーパークラスが返されます。

しかし、実際には、デフォルトでパラメータがtrueです:

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