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"]
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]
class TestClass
class << self
def own_methods
self.instance_methods - self.superclass.instance_methods
end
end
end
TestClass.own_methods
=> [:method1, :method2, :method3]
8条答案
按热度按时间6rqinv9w1#
以仅获取只属于该类的方法。
TestClass.instance_methods(false)
将返回给定示例中的方法(因为它们是TestClass的示例方法)。6ovsh4lw2#
实际上,您需要的是
TestClass.instance_methods
,除非您对TestClass
本身的功能感兴趣。或者,您可以在对象上呼叫
methods
(而非instance_methods
):0g0grzrc3#
或者不使用所有继承的方法
(Was“测试类.方法-对象.方法”)
b91juud34#
nxowjjhe5#
你可以通过调试或looksee这样的gem得到一个更详细的列表(例如,通过定义类来构造)。
du7egjpx6#
显示Ruby文档示例_方法
返回一个数组,该数组包含接收器中的公共和受保护的示例方法的名称。对于模块,这些是公共和受保护的方法。对于一个类来说,它们是示例(而不是单例)方法。2如果可选参数为false,则不包括任何祖先的方法。3我用的是官方文档中的例子。
让我们看看输出。
puruo6ea7#
若要只取得自己的方法,并排除继承的方法:
在示例中:
从外部:
将其添加到类:
(with Ruby 2.6.x)
gv8xihay8#
如果您有一个示例但不知道类名: