8

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

例如:

def foo
  puts "foo"
end

def foo2
  foo
end

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

那可能吗?如果“是”怎么办?我可以说我的问题是关于查找方法依赖项。

4

2 回答 2

4

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

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

于 2013-08-20T16:30:15.823 回答
4

您可以使用set_trace_func来获取它,但由于 Ruby 是动态的,您还需要测试代码来调用方法,以便打印调用顺序。

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

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

于 2013-08-20T19:49:25.787 回答