有没有办法在调用此方法时获取实现Ruby方法的方法列表?
例如:
def foo
puts "foo"
end
def foo2
foo
end
我想知道在调用“foo2”时它会调用1st“foo”和第二个“puts”以及这些方法定义的相应文件。 (如果“put”调用其他方法,我也想知道它们)
这可能吗?如果'是'怎么样?我可以说我的问题是找到方法依赖项。
答案 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是一种更好的选择。