在 Ruby 中,如何以编程方式确定哪个类/模块定义了被调用的方法?
说在我调用的给定范围内some_method()
。在同一范围内,我想调用一个函数,该函数find_method(:some_method)
将返回哪个 Class、Singleton Class 或 Module 定义some_method
。
这里有一些代码来说明我的意思:
class Foo
include ...
def bar
...
some_method() # calls a method in scope, assume it exists
find_method(:some_method) # Returns where the method is defined
# e.g. => SomeClassOrModule
...
end
end
我猜我必须使用反射函数的复杂组合,从继承树开始self
并使用,检查方法是否在类或模块上定义,可能还有其他一些技巧来检查范围从最里面到最外面(因为代码可以在其中运行,例如,一个)。self.ancestors
method_defined?
instance_eval
我只是不知道要实现的 Ruby 元模型的正确顺序和所有微妙之处,find_method
因此它在搜索中既详尽无遗,而且从方法分派解决方案的角度来看是正确的。
谢谢!