你怎么能在Ruby中做一个安全的,向后兼容的“反向monkeypatch”?

时间:2009-05-16 02:41:50

标签: ruby reverse monkeypatching

如果您的同事“打开”(“monkeypatches”)Ruby中的一个类并重新定义了您需要使用的一些重要功能,那么如何在不破坏已依赖/依赖的系统的情况下访问原始的monkeypatched功能他的monkeypatched定义?

3 个答案:

答案 0 :(得分:5)

考虑到方法覆盖的示例,如果您可以在加载猴子补丁之前加载一些代码,那么您可以为该方法添加别名。

class Fixnum
  alias_method :original_plus, :+
end

class Fixnum
  def +(x)
    self - x
  end
end

>> 5 + 3
=> 2
>> 5.original_plus(3)
=> 8

答案 1 :(得分:3)

我最近在rubyflow feed中看到了这个 - 它是一个简单的库,可以让你命名为aikidoka的顶级常量。没有关于如何/什么是猴子修补的任何细节,它有点难以帮助。理论上虽然您可以使用这样的方法来命名类的猴子修补版本,以便您可以独立访问它和原始版本。

答案 2 :(得分:0)

确切地说取决于改变了哪些功能以及以何种方式改变,但像Jim Wienrich的BlankSlate类这样的实现可能有所帮助: