2011-01-12 66 views
17

我想知道是否有一个Ruby方法调用,它只显示由它调用的Ruby对象定义的方法,而不是它的祖先类定义的所有方法,这是methods似乎要做的。如何检查Ruby对象的方法?

回答

30

methods接受一个可选的布尔参数,它指定是否也列出来自对象的类及其超类的方法或仅列出对象的单例方法。所以你可以做obj.methods(false)只得到在obj上定义的单例方法。

如果你想要的对象的类定义的方法,但不是由它的超类定义的方法,你可以通过调用对象的类instance_methods(false)得到它,所以它的obj.class.instance_methods(false)

1

你有几个选择 - object.methodsobject.public_methodsobject.singleton_methods ...这取决于你想要什么。因为他们都返回一个数组,你可能想尝试这样的:

# obj is the current object 
parent = obj.class.superclass 

methods = (obj.methods - parent.methods) 
+1

你的意思是`parent = obj.class.superclass`,对吧? – sepp2k 2011-01-12 01:43:13

4

我偏爱obj.methods.sort但一些其他的答案是在某些情况下更好,因为他们描述

您还可以使用obj.methods.sort.grep /foo/查找与正则表达式匹配的方法名称。 当您了解您要查找的内容时,这很有用。

相关问题