让我们说你的同事monkeypat修复Fixnum类并重新定义+方法减去而不是添加:
class Fixnum
def +(x)
self - x
end
end
>> 5 + 3
=> 2
您的问题是您想要访问+方法的原始功能。因此,您将此代码放入相同的源文件之前。它将+方法别名为“original_plus”,之后将其monkeypatches。
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
但我需要知道的是:
除了将monkeypatch加载到他修改过的同一个源文件中之前,是否还有其他加载此别名的方法?
我的问题有两个原因:
答案 0 :(得分:6)
不确定。只需在之前将反monkeypatch粘贴到代码中,即可获得源文件。
% cat monkeypatch.rb
class Fixnum
def +(x)
self - x
end
end
% cat mycode.rb
class Fixnum
alias_method :original_plus, :+
end
require 'monkeypatch'
puts 5 + 3 #=> 2
puts 5.original_plus(3) #=> 8
答案 1 :(得分:2)
Monkeypatching很适合扩展现有类并添加新功能。 Monkeypatching改变现有功能的行为只是疯了!
说真的,你应该和你的同事谈谈。
如果在您的示例中,他确实重新定义了现有方法以改变其行为,您应该与他交谈,并建议他使用alias_method_chain
以保存现有行为。