1. ホーム
  2. ruby

[解決済み] あるメソッドのソースコードを動的に取得する方法と、そのメソッドがどのファイルに格納されているかを知るにはどうすればよいですか?

2022-11-23 03:15:02

質問

メソッドのソースコードをその場で取得できるのか、また、そのメソッドがどのファイルにあるのかを知りたいです。

のように

A.new.method(:a).SOURCE_CODE
A.new.method(:a).FILE

どのように解決するのですか?

使用方法 source_location :

class A
  def foo
  end
end

file, line = A.instance_method(:foo).source_location
# or
file, line = A.new.method(:foo).source_location
puts "Method foo is defined in #{file}, line #{line}"
# => "Method foo is defined in temp.rb, line 2"

なお、組み込みのメソッドについては source_locationnil . C のソースコードをチェックしたい場合は(楽しんでください!)、適切な C ファイルを探し(多かれ少なかれクラスごとに整理されています)、そのファイルの中にある rb_define_method を見つける必要があります(ファイルの最後の方です)。

Ruby 1.8ではこのメソッドは存在しません。 このgem .