Ruby 是否可以从set_trace_func获取要返回的值?
我想编写一些类似这样的Ruby代码,以查看调用的每个方法(例如,从脚本)返回的值: 这可能吗?我可以在上面代码的范围内获得Ruby 是否可以从set_trace_func获取要返回的值?,ruby,trace,Ruby,Trace,我想编写一些类似这样的Ruby代码,以查看调用的每个方法(例如,从脚本)返回的值: 这可能吗?我可以在上面代码的范围内获得return\u值吗?Ruby 2.0有一个新类,它包含一个return\u值实例方法。您可以这样使用它: trace_point = TracePoint.new(:return) do |t| # event type specification is optional puts "returning #{t.return_value} from #{t.define
return\u值吗?Ruby 2.0有一个新类,它包含一个return\u值
实例方法。您可以这样使用它:
trace_point = TracePoint.new(:return) do |t| # event type specification is optional
puts "returning #{t.return_value} from #{t.defined_class}.#{t.method_id}"
end
trace_point.enable
如果有人仍然对1.9.3感兴趣,有一种方法很难做到:
您可以使用eval(code,binding)
从set\u trace\u func
处理程序中计算调用的函数,然后使用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)
arg_arr=[]
params=eval('method('method.parameters',binding)
参数。每个都做|参数|
案例参数[0]
当:req,:opt
arg_arr
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)