Rubyメソッドの内容をプログラムで文字列として返す方法はありますか? 例えばこんなもの?
class Foo
def foo_method
some_code = "goes here"
end
end
puts Foo.method_body(:foo_method) # => "some_code = \"goes here\""
Rubyメソッドの内容をプログラムで文字列として返す方法はありますか? 例えばこんなもの?
class Foo
def foo_method
some_code = "goes here"
end
end
puts Foo.method_body(:foo_method) # => "some_code = \"goes here\""
はい、そうです。:-)
私はWrongの一部として同様の機能 (ブロックのソースを取得する) を実装する必要があり、 chunk.rb (Ryan Davis の RubyParser とかなり面白いものに依存している) でその方法 (およびおそらくコードの再利用) を確認できます。ソース ファイルグロミング コード)。使用するにはそれを変更する必要がMethod#source_location
あり、おそらく他のものを微調整して、def
.
ところで、Rubinius にはこの機能が組み込まれていると思います。何らかの理由で、MRI (標準の Ruby 実装) から除外されたため、ハッキングされました。
更新:この回答は、同様のアルゴリズムを使用する (比較的) クリーンなワンショット ソリューションと思われるmethod_source gemを示しています (解析エラーが発生しなくなるまで、ソース ファイルから行をグロミングし続けます)。