最近のキーワード

2006年11月21日

Method#where

「メソッドがどこで定義されているか」をすこし改良。
class Method
  def where
    to_s =~ /#<Method: ([\w:]+)(\(([\w:]+)\))?#/
    if $3
      name = $3
    else
      name = $1
    end
    name.split("::").inject(Object){|o,s|o.const_get(s)}
  end
end

module Foo
module Rubymod
  def m
  end
end
end

module Bar
class Rubyco
  include Foo::Rubymod
  def c
  end
end
end

r = Bar::Rubyco.new
p r.method(:m).where      #=> Foo::Rubymod
p r.method(:c).where      #=> Bar::Rubyco
posted by ttate at 19:41| 雨| Comment(0) | TrackBack(0) | Ruby | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/27963318
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック