【问题标题】:Given the binding, determine what a rails method returns?给定绑定,确定 rails 方法返回什么?
【发布时间】:2017-08-09 10:53:57
【问题描述】:

我想对在我的 rails 代码中运行的每个方法进行一些处理,因为我需要在运行时获得有关该方法的一些信息。我正在使用 set_trace_func 来执行此操作。在 set_trace_func 中我们接收到绑定:

set_trace_func proc { |event, file, line, id, binding, classname|
  printf "%8s %s:%-2d %10s %8s\n", event, file, line, id, classname
}

如何从这个绑定中确定函数将返回什么?我知道如何访问变量、参数等,但不知道如何获取返回值,还有更好的工具吗?

【问题讨论】:

  • 什么功能?从哪里判断?请提供一个可以理解的解释。
  • 另外,这个问题与 Rails 和元编程无关。
  • @mudasobwa 这有帮助吗?
  • 不,它没有。 “将返回”什么函数?
  • @mudasobwa 我认为它解释了 set_trace_func 在执行过程中“暂停”该函数。所以我想知道它将返回什么值,可以通过处理源代码或使用 TracePoint 来确定,如下 Stefan 所回答。我希望得到一些更具建设性的批评。

标签: ruby metaprogramming


【解决方案1】:

set_trace_funcTracePoint 取代,它能够检查方法的return_value

def foo
  2 * 3
end

TracePoint.trace(:return) do |tp|
  puts "`#{tp.method_id}' returned #{tp.return_value.inspect}"
end

foo

输出:

`foo' returned 6

还有:c_return 用于跟踪用C 实现的方法,b_return 用于块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    相关资源
    最近更新 更多