Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何获取处理方法调用的方法_Ruby - Fatal编程技术网

Ruby 如何获取处理方法调用的方法

Ruby 如何获取处理方法调用的方法,ruby,Ruby,我有一个使用Ruby 1.8的应用程序。6在Rails 2.2.2应用程序中 它在代码库的各个部分(类、模块等)中有许多方法url\u的定义 调试时,我希望在日志中看到哪个方法处理对的url\u的特定调用。例如: foo = "bar" baz = url_for(foo) #would like to log the location of the url_for method which actually #handled the call, here. 如果唯一的方法是在的url\u中

我有一个使用Ruby 1.8的应用程序。6在Rails 2.2.2应用程序中

它在代码库的各个部分(类、模块等)中有许多方法
url\u的定义

调试时,我希望在日志中看到哪个方法处理对
url\u的特定调用。例如:

foo = "bar"
baz = url_for(foo)
#would like to log the location of the url_for method which actually 
#handled the call, here.
如果唯一的方法是在
url\u中引发异常,并查看堆栈跟踪,例如

baz = url_for(something_which_wont_raise_here_but_will_raise_inside_the_url_for_method)
更进一步说,如果在一个(打了很多补丁的)类的实例上调用该方法,该怎么办


编辑:在我的问题中,我没有指定它是Ruby 1.8.6,看起来我不能使用
.source\u location
方法。非常抱歉没有提前指定版本!有人有其他想法吗?

听起来你想这么做

method(:url_for)

要获取对象,然后使用
source\u location
查找对象的定义位置

您可以使用
method
source\u location
方法链获取方法定义的位置

例如:

如果您这样做:

method(:url_for).owner

它将为您提供定义方法的模块/类。这应该足以让您识别方法(除非同一个方法在同一个模块中多次被冗余定义)。然后,您可以查看该模块/类中的
url\u的定义。

不清楚。你想知道该方法是在哪里定义的(即调用了哪个方法),还是在哪里调用了该方法?这一条:“定义了该方法(即调用了哪个方法)”我希望你知道这个版本的Ruby已经很长时间没有维护了,并且包含许多未修复的bug,包括但不限于,安全漏洞。@JörgWMittag是的,我们正在升级。。。有点尴尬。谢谢。如果在对象上调用该方法,例如
foo=@baz.bar(“qux”)
,我想知道调用了哪个
bar
方法,我该怎么办?(让我们想象一下@baz是一个经过大量修补的类的实例,这并不明显)@MaxWilliams您可以使用:
@baz.method(:bar)实现它。源位置
谢谢。V抱歉,但我刚刚意识到我在这个应用程序版本的ruby中没有这个方法-请参阅我的编辑。谢谢。V抱歉,但我刚刚意识到我在这个应用程序版本的ruby中没有这个方法-请参阅我的编辑。谢谢。V抱歉,但我刚刚意识到我在这个应用程序版本的ruby中没有这个方法-请参阅我的编辑。不知道抱歉-自从这个版本发布以来已经有很长时间了。
method(:url_for).owner