Rubyでは、どのクラス/モジュールが呼び出されているメソッドを定義しているかをプログラムで判断するにはどうすればよいですか?
与えられたスコープで私が呼び出すと言いsome_method()
ます。find_method(:some_method)
同じスコープで、どのクラス、シングルトン クラス、またはモジュールが定義するかを返す関数を呼び出したいと思います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
find_method
Ruby メタモデルの正しい順序とすべての微妙な点を、完全に検索し、メソッド ディスパッチ解決の観点からも正しいように実装する方法がわからないだけです。
ありがとう!