给定一个Proc对象,是否可以查看其中的代码?
例如:
p = Proc.new{test = 0}
我需要的是从某个已经创建的Proc对象获取字符串“test = 0”的方法。
答案 0 :(得分:14)
您可以使用ruby2ruby库:
>> # 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的这个字符串表示形式转回ruby并调用它:
>> eval(p.to_ruby).call
0
有关此视频中的ruby2ruby的更多信息:Hacking with ruby2ruby。
答案 1 :(得分:13)
如果您使用的是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:0xa4b166c@(irb):2>
ruby-1.9.2-p0 > p.to_source
=> "proc { test = 0 }"
答案 2 :(得分:11)
使用proc.source_location
获取定义proc的源文件的位置。
它还返回定义的行号。
您可以使用这些值来定位proc源的位置。
答案 3 :(得分:2)
我认为你可以使用ParseTree,似乎对Ruby 1.9.2的支持是getting close。