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/experience/rubye/4663.html

(0)
上一篇 2020年7月29日 00:53
下一篇 2020年7月30日 01:15

相关推荐

  • Rails中Action Controller Parameters的params是方法还是对象?

    您可以获取ActionController::Parameters的值,使用:key或者”key”。 所以params是对象,可以是数组对象,也可以是散列对象,再或者集合。

    Ruby经验 2020年9月2日
    09750
  • Rails 信条(The Rails Doctrine)

    Ruby on Rails 惊人的活跃度主要是因为本身采用了新颖的技术和好的时机。但技术优势随着时间的推移而减弱;纵然有好的时机,时间久了影响也会逐渐减少。Rails 为何不仅能继续存在,还依然具有影响力并带领社区继续前进呢?需要更进一步地解释。我提议以下这篇内容,这是我们的基本信条,也是饱受争议的信条。 这篇信条,在…

    Ruby经验 2020年8月15日
    09450
  • Ruby字符串‘’与“”的区别

    创建字符串对象除了可以使用“”(双引号)外,也可以使用‘’(单引号)。我们试着把之前程序的双引号换成单引号,看一下效果。 程序原封不动地输出单引号里面的内容。也就是说,像\n这样的特殊字符不经过转义,程序会原封不动地直接输出。但也有例外,例如在字符串里想嵌入\与单引号时,还是需要在之前加上\。

    Ruby经验 2020年12月9日
    09550

发表评论

登录后才能评论