メソッドがどこで定義されているか
putsはどこで定義されているかを踏まえて、メソッドがどこで定義されているかを無理矢理求めてみます。
class Method def where to_s =~ /#<Method: (\w+)(\((\w+)\))?#/ if $3 return $3 else return $1 end end end module Rubymod def m end end class Rubyco include Rubymod def c end end r = Rubyco.new p r.method(:m).where #=> "Rubymod" p r.method(:c).where #=> "Rubyco"
疑問:このModule#whereメソッドはモジュールまたはクラスの「名前」しか得られません。モジュールオブジェクトまたはクラスオブジェクトを得るにはどうしたら良いんでしょうね。
↓
sumimさんのコメントを元に、Object.const_getを使うことで解決しました。いつもありがとうございます。
class Method def where to_s =~ /#<Method: (\w+)(\((\w+)\))?#/ Object.const_get($3 ? $3 : $1) end end module Rubymod def m end end class Rubyco include Rubymod def c end end r = Rubyco.new p r.method(:m).where #=> Rubymod p r.method(:c).where #=> Rubyco p r.method(:m).where.class #=> Module p r.method(:c).where.class #=> Class