Procオブジェクトがあれば、その中のコードを見ることは可能でしょうか?例えばProcオブジェクトからコードを抽出するには?
:私は必要なもの
p = Proc.new{test = 0}
は、既に作成されていたProcオブジェクトから文字列「= 0のテスト」を取得するためのいくつかの方法のためです。
Procオブジェクトがあれば、その中のコードを見ることは可能でしょうか?例えばProcオブジェクトからコードを抽出するには?
:私は必要なもの
p = Proc.new{test = 0}
は、既に作成されていたProcオブジェクトから文字列「= 0のテスト」を取得するためのいくつかの方法のためです。
:
>> # tested with 1.8.7
>> require "parse_tree"
=> true
>> require "ruby2ruby"
=> true
>> require "parse_tree_extensions"
=> true
>> p = Proc.new{test = 0}
>> p.to_ruby
=> "proc { test = 0 }"
あなたはまた戻っルビーにPROCのこの文字列表現をオンにし、それを呼び出すことができます。
>> eval(p.to_ruby).call
0
この中ruby2rubyの詳細を動画:Hacking with ruby2ruby
これはすばらしいビデオです。リンクに感謝します。 – zetetic
私はこれにParseTreeを使うことができると思います。また、Ruby 1.9.2のサポートはgetting closeと思われます。
ParseTreeはRuby 1.8でEOLに達しました。 – weakish
あなたはRuby 1.9のを使用している場合は、あなたがこれを言うための別の方法があり、ウェブ検索のthe sourcify gem
$ irb
ruby-1.9.2-p0 > require 'sourcify'
=> true
ruby-1.9.2-p0 > p = Proc.new{test = 0}
=> #<Proc:[email protected](irb):2>
ruby-1.9.2-p0 > p.to_source
=> "proc { test = 0 }"
sourcify宝石は今や維持されていません:https://github.com/ngty/sourcify/issues/34#issuecomment-75375440 – Gerry
を使用することができます「PROC内のコードを検査します。」 –
この質問が尋ねられてから数年が経ちました。このエリアに最近の開発があったかどうかは誰にでも分かりますか? – Ajedi32
より最新の回答:http://stackoverflow.com/a/15024732/109175( "use sourcify") –