获取一个类的实例方法的列表
我有一个class级:
class TestClass def method1 end def method2 end def method3 end end
我怎样才能得到这个类中的方法列表( method1
, method2
, method3
)?
您实际上需要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]