如何检查 Ruby 对象的方法?

发布于 2024-10-11 09:33:15 字数 99 浏览 5 评论 0原文

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

I am wondering if there is a Ruby method call that shows only the methods defined by the Ruby object it's called from, as opposed to all the methods defined by its ancestor classes, which is what methods seems to do.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

万人眼中万个我 2024-10-18 09:33:15

methods 采用可选的布尔参数,该参数指定是同时列出对象的类及其超类中的方法,还是仅列出对象的单例方法。因此,您可以执行 obj.methods(false) 来仅获取 obj 上定义的单例方法。

如果您想要由对象的类定义的方法,而不是由其超类定义的方法,则可以通过在对象的类上调用 instance_methods(false) 来获取该方法,因此它是 obj.class。 instance_methods(假)

methods takes an optional boolean parameter, which specifies whether to also list the methods from the object's class and its superclasses or just the object's singleton methods. So you can do obj.methods(false) to only get the singleton methods defined on obj.

If you want the methods defined by the object's class, but not those defined by its superclasses, you can get that by calling instance_methods(false) on the object's class, so it's obj.class.instance_methods(false).

℉服软 2024-10-18 09:33:15

我偏向 obj.methods.sort ,但其他一些答案在某些情况下更好,正如它们所描述的那样

您也可以使用 obj.methods.sort.grep /foo/ 查找与正则表达式匹配的方法名称。
当您知道自己要寻找什么时,这会很有帮助。

I'm partial to obj.methods.sort but some of the other answers are better in certain cases as they describe

You can also use obj.methods.sort.grep /foo/ to find method names matching the regexp.
This is helpful when you have an idea of what you're looking for.

只涨不跌 2024-10-18 09:33:15

您有几个选项 - object.methodsobject.public_methodsobject.singleton_methods...这取决于您想要什么。由于它们都返回一个数组,您可能想尝试以下操作:

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

methods = (obj.methods - parent.methods)

You have a few options - object.methods, object.public_methods, object.singleton_methods... it depends on what you want. Since they both return an array, you might want to try something like:

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

methods = (obj.methods - parent.methods)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文