获取一个类的实例方法的列表

我有一个class级:

class TestClass def method1 end def method2 end def method3 end end 

我怎样才能得到这个类中的方法列表( method1method2method3 )?

您实际上需要TestClass.instance_methods ,除非您对TestClass本身可以执行的操作感兴趣。

 class TestClass def method1 end def method2 end def method3 end end TestClass.methods.grep(/method1/) # => [] TestClass.instance_methods.grep(/method1/) # => ["method1"] TestClass.methods.grep(/new/) # => ["new"] 

或者你可以在对象上调用methods (不是instance_methods ):

 test_object = TestClass.new test_object.methods.grep(/method1/) # => ["method1"] 
 TestClass.methods(false) 

只得到属于那个类的方法。

TestClass.instance_methods(false)将返回给定示例中的方法(因为它们是TestClass的实例方法)。

 TestClass.instance_methods 

或者没有所有的inheritance方法

 TestClass.instance_methods - Object.methods 

(是'TestClass.methods – Object.methods')

你可以得到一个更详细的列表(例如,通过定义类来构造),诸如debugging或查看等gem。

 $ irb --simple-prompt class TestClass def method1 end def method2 end def method3 end end tc_list = TestClass.instance_methods(false) #[:method1, :method2, :method3] puts tc_list #method1 #method2 #method3 

根据Ruby Doc的instance_methods

返回一个数组,其中包含接收者中公有和受保护实例方法的名称。 对于一个模块,这些是公共和受保护的方法; 对于一个类,它们是实例(而不是单例)方法。 如果可选参数为false,则不包括任何祖先的方法。 我正在采取官方文档的例子。

 module A def method1() puts "method1 say hi" end end class B include A #mixin def method2() puts "method2 say hi" end end class C < B #inheritance def method3() puts "method3 say hi" end end 

让我们看看输出。

 A.instance_methods(false) => [:method1] A.instance_methods => [:method1] B.instance_methods => [:method2, :method1, :nil?, :===, ...# ] # methods inherited from parent class, most important :method1 is also visible because we mix module A in class B B.instance_methods(false) => [:method2] C.instance_methods => [:method3, :method2, :method1, :nil?, :===, ...#] # same as above C.instance_methods(false) => [:method3]