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

相关推荐

  • Ruby语言class方法与superclass方法的介绍

    class方法 当想知道某个对象是哪个类的实例时,我们可以使用class方法。 superclass方法 当想知道某个子类(subclass)继承哪个父类(superclass),我们可以使用superclass方法。 当被给予的类没有父类时,将返回nil值。 注:父类(superclass)又称为超类,但笔者认为父类…

    Ruby经验 2020年7月28日
    01.3K0
  • 安装和部署gem不安装rdoc和ri的方法

    句法: 安装rubyonrails的时候不安装rdoc和ri 如果要部署到服务器,或者不想等待为每个gem安装rdoc和ri,则可以禁用它们以进行gem安装和更新。只需将以下行添加到您的〜/ .gemrc或/ etc / gemrc中: 注意:新版gem取消了–no-rdoc和–no-ri,变更…

    Ruby经验 2020年8月10日
    01.5K0
  • Ruby语言的鸭子类型(Duck Typing)

    Java语言是一种具有静态类型系统的语言,而Ruby并不像Java这样,Ruby的类不是类型,在Ruby中,对象类型更多是根据对象能做什么决定的,它被称为Duck Typing,如果对象能够像鸭子那样行走,像鸭子那样呱呱叫的话,那么解释器会很高兴地把它当成鸭子来对待。

    Ruby经验 2021年6月30日
    05790

发表回复

登录后才能评论