我想知道是否有一个Ruby方法调用只显示它调用的Ruby对象定义的方法,而不是它的祖先类定义的所有方法,这是methods
似乎做的事情
答案 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.methods
,object.public_methods
,object.singleton_methods
...这取决于您的需求。由于它们都返回一个数组,你可能想尝试类似的东西:
# obj is the current object
parent = obj.class.superclass
methods = (obj.methods - parent.methods)