如何从Proc对象中提取代码?
给定一个Proc对象,是否可以查看其中的代码?
例如:
p = Proc.new{test = 0}
我需要的是从某个已经创建的Proc对象获取字符串“test = 0”的方法。
您可以使用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的这个字符串表示forms转回ruby并调用它:
>> eval(p.to_ruby).call 0
有关ruby2ruby的更多信息,请参阅此video: 使用ruby2ruby进行黑客攻击 。
如果您使用的是Ruby 1.9,则可以使用sourcify gem
$ irb ruby-1.9.2-p0 > require 'sourcify' => true ruby-1.9.2-p0 > p = Proc.new{test = 0} => # ruby-1.9.2-p0 > p.to_source => "proc { test = 0 }"
使用proc.source_location
获取定义proc的源文件的位置。 它还返回定义的行号。 您可以使用这些值来定位proc源的位置。
我认为你可以使用ParseTree ,似乎对Ruby 1.9.2的支持也越来越近了 。
- 如何检查整个rails项目是否存在编译错误
- find_or_create_by_id的最佳方法,但如果找到记录则更新属性
- 参数超出范围Rails 4和bootstrap3-datetimepicker-rails
- 为Clojure应用程序启动工头的问题
- 使用ruby调整动画GIF图像的大小?
- 如何订购字母列表(“a”,“b”,“c”,…,“z”,“aa”,“ab”)? 字符串#sunk和在这种情况下似乎不能很好地协同工作
- 当have_selector返回成功时,Rspec have_field引发错误
- 尝试在Windows,RubyMine IDE中使用Ruby on Rails的LoadError
- 无法启动Rails服务器