【发布时间】:2009-05-16 15:46:46
【问题描述】:
假设您的同事猴子修补了 Fixnum 类并重新定义 + 方法以减去而不是添加:
class Fixnum
def +(x)
self - x
end
end
>> 5 + 3
=> 2
您的问题是您想访问 + 方法的原始功能。所以你把这段代码放在他之前的同一个源文件中。它将 + 方法别名为“original_plus”在猴子修补它之前。
class Fixnum
alias_method :original_plus, :+
end
class Fixnum
def +(x)
self - x
end
end
现在可以通过 original_plus 访问 + 方法的原始功能
>> 5 + 3
=> 2
>> 5.original_plus(3)
=> 8
但我需要知道的是:
除了将它粘贴到他修改的同一个源文件中之外,还有其他方法可以在加载他的猴子补丁之前加载这个别名吗?
我的问题有两个原因:
- 我可能不想让他知道我已经这样做了
- 如果更改了源文件,使别名最终低于猴子补丁,则别名将不再产生所需的结果。
【问题讨论】:
-
天哪,光是看着这只猴子补丁就让我畏缩。
-
@Ólafur - 我同意。尽管它提供了强大的功能,但猴子补丁确实打开了许多灾难性副作用的可能性。你必须问它是否真的值得。
标签: ruby monkeypatching