我如何检查Ruby对象的方法?

时间:2011-01-12 01:30:42

标签: ruby introspection

我想知道是否有一个Ruby方法调用只显示它调用的Ruby对象定义的方法,而不是它的祖先类定义的所有方法,这是methods似乎做的事情

3 个答案:

答案 0 :(得分:32)

methods接受一个可选的布尔参数,该参数指定是否还列出来自对象类及其超类的方法,或仅列出对象的单例方法。因此,您可以obj.methods(false)只获取obj上定义的单例方法。

如果你想要对象类所定义的方法,而不是那些由超类定义的方法,你可以通过在对象的类上调用instance_methods(false)来获得它,所以它是obj.class.instance_methods(false)

答案 1 :(得分:4)

我偏向于obj.methods.sort,但在某些情况下,其他一些答案在描述时更好

您还可以使用obj.methods.sort.grep /foo/查找与正则表达式匹配的方法名称。 如果您对所需内容有所了解,这将非常有用。

答案 2 :(得分:1)

您有几个选项 - object.methodsobject.public_methodsobject.singleton_methods ...这取决于您的需求。由于它们都返回一个数组,你可能想尝试类似的东西:

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

methods = (obj.methods - parent.methods)