Ruby 如何获得IRB中仅我可用方法的列表?

Ruby 如何获得IRB中仅我可用方法的列表?,ruby,Ruby,假设我将一些代码加载到irb中,如下所示: class MyClass def m #... something end def a #... something end end 我如何才能获得一个仅包含可用方法的列表?如果我运行MyClass.new.methods我将返回所有可用的实例方法 我想看看::m,:a 此外,如果我的方法没有包装在类中,该怎么办 def x #... something end def z #... something

假设我将一些代码加载到
irb
中,如下所示:

class MyClass
  def m 
    #... something
  end
  def a
    #... something
  end
end
我如何才能获得一个仅包含可用方法的列表?如果我运行
MyClass.new.methods
我将返回所有可用的
实例方法

我想看看:
:m,:a

此外,如果我的
方法
没有包装在
中,该怎么办

def x 
  #... something
end
def z
  #... something
end
如何查看可用的内容?调用
self.methods
(运行:
methods
)甚至不会列出我的方法。

使用以下命令执行以下操作:

返回一个数组,该数组包含接收方中公共和受保护实例方法的名称。对于模块,这些是公共和受保护的方法;对于类,它们是实例(而不是单例)方法。如果没有参数,或者参数为false,则返回mod中的实例方法,否则返回mod和mod的超类中的方法

如果像下面这样在顶层定义方法,它们将成为
对象的实例方法。所以我会用

返回mod中定义的私有实例方法的列表。如果可选参数不为false,则包含任何祖先的方法


这是我经常使用的一个小技巧,特别是当我试图使用我没有编写的库中的对象时:

obj = MyClass.new
obj.methods.sort - 0.methods   # => [:a, :m]
数字
0
有一小部分方法,这些方法大部分都是您不想看到的标准Ruby内容。您可以使用
Object.new
而不是
0
,这会更好,因为您可以看到类似
succ
的方法,但它需要更多的键入

与MyClass.instance_methods(false)
相比,它的优势在于它显示了超类中包含的方法、模块中包含的方法以及动态定义的方法。
另外,您通常有一个要检查的对象,而不是一个类。

Nice!如果没有
?那真是太棒了+1,我实际上得到了
[:default\u src\u encoding,:irb\u binding,:x,:z]
使用:
对象。private\u instance\u方法(false)
可能是因为我的Windows框?将在我的Mac上重新测试。谢谢很好的解释,非常感谢+1
MyClass.new.methods-Object.new.methods
效果很好,但是直接访问不在类范围内的私有实例方法如何?您是否有@Arup的替代解决方案:
Object.private\u instance\u方法(false)
?这不是问题:
obj.class
def x 
  #... something
end
def z
  #... something
end

Object.private_instance_methods(false)
# => [:x, :z]
obj = MyClass.new
obj.methods.sort - 0.methods   # => [:a, :m]