我想知道是否有一个Ruby方法调用,它只显示由调用它的Ruby对象定义的方法,而不是由它的祖先类定义的所有方法,这似乎就是methods
所做的。
发布于 2011-01-12 09:39:14
methods
接受一个可选的布尔参数,该参数指定是也列出对象的类及其超类中的方法,还是仅列出对象的单例方法。因此,您可以使用obj.methods(false)
来仅获取在obj
上定义的单例方法。
如果您需要由对象的类定义的方法,而不是由其超类定义的方法,则可以通过在对象的类上调用instance_methods(false)
来实现,因此它是obj.class.instance_methods(false)
。
发布于 2011-01-12 09:41:46
我倾向于obj.methods.sort
,但其他一些答案在某些情况下更好,正如它们所描述的那样
您还可以使用obj.methods.sort.grep /foo/
查找与regexp匹配的方法名称。当你知道你要找的是什么的时候,这是很有帮助的。
发布于 2011-01-12 09:39:30
您有几个选项- object.methods
、object.public_methods
、object.singleton_methods
...这取决于你想要什么。因为它们都返回一个数组,所以您可能想要尝试如下所示:
# obj is the current object
parent = obj.class.superclass
methods = (obj.methods - parent.methods)
https://stackoverflow.com/questions/4664578
复制相似问题