我如何检查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.methods
, object.public_methods
, object.singleton_methods
……这取决于你想要什么。 由于它们都返回一个数组,你可能想尝试类似的东西:
# obj is the current object parent = obj.class.superclass methods = (obj.methods - parent.methods)