最近のキーワード

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 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

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


※画像の中の文字を半角で入力してください。

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

この広告は180日以上新しい記事の投稿がないブログに表示されております。