有没有办法在调用此方法时获取实现 Ruby 方法的方法列表?
例如:
def foo
puts "foo"
end
def foo2
foo
end
我想知道,当调用“foo2”时,它会调用第一个“foo”和第二个“puts”以及这些方法定义到的相应文件。(如果“puts”调用其他方法,我也想知道它们)
那可能吗?如果“是”怎么办?我可以说我的问题是关于查找方法依赖项。
有没有办法在调用此方法时获取实现 Ruby 方法的方法列表?
例如:
def foo
puts "foo"
end
def foo2
foo
end
我想知道,当调用“foo2”时,它会调用第一个“foo”和第二个“puts”以及这些方法定义到的相应文件。(如果“puts”调用其他方法,我也想知道它们)
那可能吗?如果“是”怎么办?我可以说我的问题是关于查找方法依赖项。
静态代码分析,尤其是您想要执行的分析(列出方法中调用的所有方法),在 ruby 中非常困难(几乎不可能),因为该语言是动态的并且允许非常强大的元编程技术。甚至解析器本身在尝试执行代码之前也不知道所需的方法。
示例:使用从文件中读取的代码调用 eval。
您可以使用set_trace_func来获取它,但由于 Ruby 是动态的,您还需要测试代码来调用方法,以便打印调用顺序。
set_trace_func proc { |event, filename, line, id, binding, klass| puts "#{klass}##{id}" }
在 Ruby 2.0 中,TracePoint是一个更好的选择。