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
有没有办法检查';s内部方法';是用Ruby编写代码还是修改它?_Ruby_Reflection_Runtime_Redmine - Fatal编程技术网

有没有办法检查';s内部方法';是用Ruby编写代码还是修改它?

有没有办法检查';s内部方法';是用Ruby编写代码还是修改它?,ruby,reflection,runtime,redmine,Ruby,Reflection,Runtime,Redmine,我目前正在为Redmine创建一个我自己的插件。我在其核心中发现了以下方法(不是精确的代码,但其思想得到了保留): 我必须将这个“3”改为“6”,因为数组中的三个元素对于我的插件来说是不够的。我可以手动更改它,没有任何崩溃,但我不想修补Redmine的核心。所以,我正在编写一个插件,用我自己的实现来代替这个方法,它做同样的事情,但是三变为六 问题是:如果此文件更新,将使用过时的方法。是否有任何方法可以在运行时(例如,当服务器启动时)检查方法中写入的内容 顺便问一下,有没有什么方法可以直接修改这个

我目前正在为Redmine创建一个我自己的插件。我在其核心中发现了以下方法(不是精确的代码,但其思想得到了保留):

我必须将这个“3”改为“6”,因为数组中的三个元素对于我的插件来说是不够的。我可以手动更改它,没有任何崩溃,但我不想修补Redmine的核心。所以,我正在编写一个插件,用我自己的实现来代替这个方法,它做同样的事情,但是三变为六

问题是:如果此文件更新,将使用过时的方法。是否有任何方法可以在运行时(例如,当服务器启动时)检查方法中写入的内容


顺便问一下,有没有什么方法可以直接修改这个常量而不重写整个方法?

没有,在Ruby中无法在运行时获得方法的源代码。在一些Ruby实现中,可能有一种方法可以获得在某些时候可以工作的源代码,但这种方法既不可靠,也不可移植。毕竟,甚至不能保证源代码是Ruby,因为大多数实现允许您使用Ruby以外的语言编写方法(例如YARV中的C、JRuby中的Java等)

如果您能够访问该文件,那么您可以使用pry gem来检查源代码。或者如果没有这样的gem,您可以通过执行
put方法(:foo).source\u location
手动检查方法的位置,并阅读该部分


更改行为的最简单方法是重写整个方法。

I您想要的是实际答案,发布实际代码,而不是一些伪代码(特别是在处理一个相当知名的开源系统时)
def method(foo, bar, array)
    # Do some complex stuff with foo and bar

    @array = array
    @array.uniq!
    @array = @array[0:3]

    # Do some complex weird stuff with @array
end