You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby:如何列出主作用域中声明的方法

Ruby:如何列出主作用域中声明的方法

在Ruby里,直接写在主作用域(没嵌套在任何类或模块里)的方法,其实会被定义成Object类的私有实例方法。这就是你之前尝试的几种方式都找不到它们的原因——要么你在找公共方法/类方法,要么没考虑到私有实例方法的范畴。

要列出这些方法,有两种实用的方式:

  1. 查看当前main对象的私有方法列表
    在主作用域里,self就是main对象,你可以用private_methods获取它的私有方法,再过滤目标方法:

    private_methods.grep(/asdf|qwer/)
    

    如果只想看你自己定义的方法(排除继承来的私有方法),可以加上false参数:

    private_methods(false).grep(/asdf|qwer/)
    
  2. 查看Object类的私有实例方法
    主作用域的方法本质上是Object的私有实例方法,所以也可以直接查询Object的私有实例方法:

    Object.private_instance_methods.grep(/asdf|qwer/)
    

    同样,要只看直接定义在Object里的方法,加false参数排除继承项:

    Object.private_instance_methods(false).grep(/asdf|qwer/)
    

顺便解释下你之前尝试的方式为什么没生效:

  • methods/self.methods:返回的是当前对象的公共方法,而主作用域方法是私有的,所以看不到。
  • Object.methods:返回的是Object类的类方法,和你定义的实例方法不是同一类。
  • Object.instance_methods:返回的是Object类的公共实例方法,不包含私有方法。

实际验证示例:

def asdf
  puts "asdf"
end

def qwer
  puts "qwer"
end

# 方式1输出
puts private_methods(false).grep(/asdf|qwer/) # => [:asdf, :qwer]

# 方式2输出
puts Object.private_instance_methods(false).grep(/asdf|qwer/) # => [:asdf, :qwer]

这样就能精准找到你在主作用域定义的方法了!

备注:内容来源于stack exchange,提问作者Svintoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 10:17:59