如果有人仍有意在1.9.3,有做这个cludgy方式:
您可以set_trace_func
内使用eval(code, binding)
评价一个调用的函数从处理程序,然后eval
返回的值,你已经注意到。
你必须自己重新构造调用者代码。 喜欢的东西:
arg_arr = []
params = eval('method(__method__).parameters', binding)
params.each do |param|
case param[0]
when :req, :opt
arg_arr << param[1]
when :rest
arg_arr << '*' + param[1]
else
puts "Need handler for type #{param[0]}"
end
end
call_expr = "#{id} #{arg_arr.join(',')}"
puts "Call with <#{call_expr}>"
res = eval(call_expr, binding)
puts "sub-method #{id} returned #{res}"
eval("return #{res.inspect}", binding)
你只能这样做了向下一级,因为set_trace_func
已关闭其处理程序的德持续时间。另外arguments
的输出出现无证。另外,它使用邪恶。