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