私は仕事場でかなり大きなレールプロジェクトを担当しています。時には、クラス/定数の定義を捜す必要があります。私のためにRubyに組み込みのメソッドがありますか?例:任意のファイルの前に非常に冒頭でシンボルがirbで定義されている箇所を参照
irb> SOME_CONSTANT.__file__
=> /some/path/to/a/file
私は仕事場でかなり大きなレールプロジェクトを担当しています。時には、クラス/定数の定義を捜す必要があります。私のためにRubyに組み込みのメソッドがありますか?例:任意のファイルの前に非常に冒頭でシンボルがirbで定義されている箇所を参照
irb> SOME_CONSTANT.__file__
=> /some/path/to/a/file
これはあなたが探しているものではありませんが、のメソッドには.source_locationメソッドがあります。これを使用して、クラスが実際に実装されている場所を見つけることができます。 (ルビーはあなたがクラスを再度開くことができますので、これは複数の場所にすることができる)
例えば、オブジェクトのインスタンスを与えられ、私:
i.methods.map do |method_name|
method_obj = i.method(m)
file, line = method_obj.source_location
file #map down to the file name
end.uniq
はあなたにどこすべてのファイルのリストを与えますのメソッドが実装されています。
これは、少なくとも1つのメソッドがrubyで実装されているクラスで有効です。しかし、定数ではうまくいかないでしょう。
は、モジュール以外のものとして確認したいというクラス/定数を定義する行を挿入し、ロードされます。たとえば、コード内にクラスまたは他の種類の定数A
があり、定義されている場所を知りたいとします。そして、メインファイルの先頭に、それは最初のクラスの定義を満たしている時はいつでもプログラムが実行された後
A = nil
、/定数A
を書き、それが
some_path_to_a_file:line_number in `some_method': A is not a class (TypeError)
のようなものが表示されます
又は
some_path_to_a_file:line_number: warning: already initialized constant A
そして、some_path_to_a_file:line_number
はA
が定義されている場所です。
Ruby 1.9.2を使用している場合、@ YenTheFirstの答えは正しいです:Methodオブジェクトに#source_location
を呼び出してください。
Ruby 1.8.7を使用している場合、#source_location
は存在しません(まだ)。メソッドのthis implementationのようなものが必要です。 (もう1つまたは2つは浮かんでいますが、もう1つは本当に素早く見つかりません)。
http://stackoverflow.com/a/13015691/260122によれば、 'method#source_location'をバックポートするgem [ruby18_source_location](https://github.com/ConradIrwin/ruby18_source_location)があります。 – clacke
あなたのディレクトリに「SOME_CONSTANT =」のためのグロッピングだけを試みましたか? –
.....................はい? –