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

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

methods采用可选的布尔参数,该参数指定是否还列出来自对象类及其超类的方法,或仅列出对象的单例方法。 所以你可以做obj.methods(false)来只获取在obj定义的单例方法。

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

我偏爱obj.methods.sort但在某些情况下,其他一些答案会更好

您还可以使用obj.methods.sort.grep /foo/查找与regexp匹配的方法名称。 当您知道自己在寻找什么时,这会很有帮助。

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

 # obj is the current object parent = obj.class.superclass methods = (obj.methods - parent.methods)