如何找到Ruby方法依赖项?

时间:2013-08-20 16:03:43

标签: ruby

有没有办法在调用此方法时获取实现Ruby方法的方法列表?

例如:

def foo
  puts "foo"
end

def foo2
  foo
end

我想知道在调用“foo2”时它会调用1st“foo”和第二个“puts”以及这些方法定义的相应文件。 (如果“put”调用其他方法,我也想知道它们)

这可能吗?如果'是'怎么样?我可以说我的问题是找到方法依赖项。

2 个答案:

答案 0 :(得分:4)

静态代码分析,特别是你想要执行的代码(列出方法中调用的所有方法),在ruby中非常难(几乎不可能),因为语言是动态的并且允许非常强大的元编程技术。甚至解析器本身也不知道在尝试执行代码之前所需的方法。

示例:使用从文件读取的代码调用eval。

答案 1 :(得分:4)

你可以使用set_trace_func来解决这个问题,但由于Ruby是动态的,你还需要测试代码来调用方法,以便打印调用顺序。

set_trace_func proc { |event, filename, line, id, binding, klass| puts "#{klass}##{id}" }

在Ruby 2.0中,TracePoint是一种更好的选择。