11.Ruby语言的猴子补丁(Monkey Patch)

猴子补丁(monkey patch)术语起源于guerrilla(游击队) patch,它指的是在运行时偷偷摸摸地更改代码 – 并且可能与其他此类补丁不兼容。guerrilla这个词,与gorilla(大猩猩)谐音,可能是为了让补丁听起来不那么吓人,变成了monkey(猴子)。

猴子补丁仅指在运行时动态修改类或模块。猴子补丁用于:

  • 在运行时替换方法/类/属性/函数,例如在测试期间存根一个函数;
  • 修改/扩展第三方产品的行为,而无需维护源代码的私有副本;
  • 在运行时将补丁的结果应用于内存中的状态,而不是磁盘上的源代码;
  • 分发与原始源代码一起存在的安全或行为修复程序(例如,将修复程序作为Ruby on Rails平台的插件分发);
  • 探索不同的自动修复以提供自我修复。

猴子补丁是一个贬义词,这是因为使用它确实存在风险,如果误用了它,那么无疑是危险的,所以使用猴子补丁一定要多加小心,猴子补丁涉及全局性修改,很难追踪。

Ruby中的核心类库和标准类库中的类和模块对于开发者是“开放的“,这是Ruby的关键特性之一,可以在运行时修改和扩展,但是这会引起诸多问题,比如说Array类已经有了一个名为replace的方法,如果再定义自己的replace方法时,你无意中就覆盖了原来的replace方法,而其他程序会以来原来的方法,可能会引起诸多Bug,这种方式被称为猴子补丁(monkey patch)。

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/ruby/rubyhigh/4663.html

发表评论

登录后才能评论