0

Rubyメソッドの内容をプログラムで文字列として返す方法はありますか? 例えばこんなもの?

class Foo
  def foo_method
    some_code = "goes here"
  end
end

puts Foo.method_body(:foo_method) # => "some_code = \"goes here\""
4

1 に答える 1

1

はい、そうです。:-)

私はWrongの一部として同様の機能 (ブロックのソースを取得する) を実装する必要があり、 chunk.rb (Ryan Davis の RubyParser とかなり面白いものに依存している) でその方法 (およびおそらくコードの再利用) を確認できます。ソース ファイルグロミング コード)。使用するにはそれを変更する必要がMethod#source_locationあり、おそらく他のものを微調整して、def.

ところで、Rubinius にはこの機能が組み込まれていると思います。何らかの理由で、MRI (標準の Ruby 実装) から除外されたため、ハッキングされました。

更新:この回答は、同様のアルゴリズムを使用する (比較的) クリーンなワンショット ソリューションと思われるmethod_source gemを示しています (解析エラーが発生しなくなるまで、ソース ファイルから行をグロミングし続けます)。

于 2013-02-06T22:02:43.693 に答える