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月26日 14:26
下一篇 2020年8月1日 23:28

相关推荐

  • Ruby语言Core API(核心类库)和Standard Library API(标准类库)的区别

    区别1: Ruby的Core API(核心类库)包含了一些最常用的类和模块,而Standard Library API(标准类库)则包含了除了核心类库以外的类库,标准类库是对核心类库的补充,两者非包含与被包含关系。 区别2: 核心类库是自动加载的,无需额外加载。 标准类库里面的类和模块因为开发者的需求不同而被选择性地调…

    Ruby经验 2020年7月26日
    01.4K0
  • Ruby语言puts、print、p方法的区别

    puts方法与print方法稍有区别,puts方法在输出结果的末尾一定会输出换行符。 p方法:换行符(\n)、制表符(\t)等特殊符号不会转义。 所以puts方法与print方法输出程序执行的结果、信息等,p方法是提供给编程者使用的。

    Ruby经验 2020年12月10日
    01.9K0
  • Ruby代码的三种运行方式

    1.ruby -e命令式 -e 参数告诉解释器执行“一行”Ruby代码,多个 -e 允许。 2.ruby文件式 helloworld.rb文件代码清单: 启动终端,使用 cd 命令,切换到存放 helloworld.rb 文件的目录。执行以下命令: 3.irb交互式 irb 是 interactive ruby 的缩写…

    Ruby经验 2020年6月5日
    01.2K0

发表回复

登录后才能评论