猴子补丁(monkey patch)术语起源于guerrilla(游击队)patch,它指的是在运行时偷偷摸摸地更改代码,并且可能与其它此类补丁不兼容。guerrilla(游击队)这个单词与gorilla(大猩猩)谐音,可能是为了让补丁听起来不那么吓人,变成了monkey(猴子)。
猴子补丁仅指在运行时动态修改类或模块。猴子补丁用于:
- 在运行时替换方法/类/属性/函数,例如在测试期间存根一个函数;
- 修改/扩展第三方产品的行为,而无需维护源代码的私有副本;
- 在运行时将补丁的结果应用于内存中的状态,而不是磁盘上的源代码;
- 分发与原始源代码一起存在的安全或行为修复程序(例如,将修复程序作为Ruby on Rails平台的插件分发);
- 探索不同的自动修复以提供自我修复。
猴子补丁是一个贬义词,这是因为使用它确实存在风险,如果误用了它,那么无疑是危险的,所以使用猴子补丁一定要多加小心,猴子补丁涉及全局性修改,很难追踪。
Ruby中的核心类库和标准类库中的类和模块对于开发者是“开放的“,这是Ruby的关键特性之一,可以在运行时修改和扩展,但是这会引起诸多问题,比如说Array类已经有了一个名为replace的方法,如果再定义自己的replace方法时,你无意中就覆盖了原来的replace方法,而其它程序会依赖原来的方法,可能会引起诸多bug,这种方式被称为猴子补丁(monkey patch)。
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/experience/rubye/4663.html