当前位置: 首页 > 编程笔记 >

Ruby使用Monkey Patch猴子补丁方式进行程序开发的示例

芮安顺
2023-03-14
本文向大家介绍Ruby使用Monkey Patch猴子补丁方式进行程序开发的示例,包括了Ruby使用Monkey Patch猴子补丁方式进行程序开发的示例的使用技巧和注意事项,需要的朋友参考一下

猴子补丁(Monkey Patch)是一种特殊的编程技巧。Monkey patch 可以用来在运行时动态地修改(扩展)类或模块。我们可以通过添加 Monkey Patch 来修改不满足自己需求的第三方库,也可以添加 Monkey Patch 零时修改代码中的错误。

词源
Monkey patch 最早被称作 Guerrilla patch,形容这种补丁像游击队员一样狡猾。后来因为发音相似,被称为 Gorilla patch。因为大猩猩不够可爱,后改称为 Monkey patch。

使用场景
以我的理解,Monkey patch 有两种使用场景:
紧急的安全性补丁,即 Hotfix;
修改或扩展库中的属性和方法。

例子:
alias:

class Monkey2 < Monkey 
 def method2 
  puts "This is method2" 
 end 
  
 alias output method2 
end 
 
monkey = Monkey2.new 
monkey.method2 
monkey.output 

include:

module Helper 
 def help 
  puts "Help..." 
 end 
  
 def method1 
  puts "helper method1..." 
 end 
end 
 
class Monkey 
 include Helper 
 def method1 
  puts "monkey method1..." 
 end 
end 
 
monkey = Monkey.new 
monkey.help 
monkey.method1#因为重名,当前类的方法优先 


undef:

class Monkey 
 def method1 
  puts "This is method1" 
 end 
end  
 
class Monkey2 < Monkey 
 def method2 
  puts "This is method2" 
 end 
end 
 
monkey = Monkey2.new 
monkey.method1  
monkey.method2 
 
class Monkey2 
 undef method1 
 undef method2 
end 
 
monkey.method1 
monkey.method2 

我们还可以使用undef_method或者remove_method实现undef <method_name>同样的功能,例子如下:

class Monkey2 
 remove_method :method1 
 undef_method :method2 
nd 


在使用猴子补丁的时候,还应注意如下事项:
1、基本上只追加功能
2、进行功能变更时要谨慎,尽可能的小规模
3、注意相互调用

 类似资料:
  • 问题内容: 猴子如何修补的功能。我正在尝试添加一个从页面发出的每个ajax请求返回时将被调用的函数。 我知道这听起来像一个可怕的主意,但是用例非常特殊。我想将特定的SDK与控制台(jqconsole)一起使用,但在不修改外部SDK的情况下显示控制台内ajax调用的状态和结果。 我看过这篇文章,它提供了很好的信息,但是没有任何关于猴子修补回调的内容,这似乎超出了我的JavaScript技能。 PS无

  • 本文向大家介绍Monkey Patch猴子补丁编程方式及其在Ruby中的运用,包括了Monkey Patch猴子补丁编程方式及其在Ruby中的运用的使用技巧和注意事项,需要的朋友参考一下 何谓猴子补丁(Monkey Patch)?在动态语言中,不修改源代码而对功能进行追加和变更。 使用猴子补丁的目的: 1、追加功能 2、功能变更 3、修正程序错误 4、增加钩子,在执行某个方法的同时执行一些其他的处

  • 问题内容: 我有一个类,位于一个单独的模块中,无法更改。 除了此文件之外,这不会更改MyClass的其他任何位置。但是,如果我添加这样的方法 这将起作用,并且foo方法将在其他任何地方都可用。 如何完全替换班级? 问题答案:

  • 本文向大家介绍python 猴子补丁(monkey patch),包括了python 猴子补丁(monkey patch)的使用技巧和注意事项,需要的朋友参考一下 写了一段时间java切回写python偶尔会出现一些小麻烦,比如:在java中自定义对象变成json串很简单,调用一个方法就行,但同样的转换在python中却不太容易实现。在寻找python自定义对象转json串的过程中,接触到了猴子补

  • 本文向大家介绍Python猴子补丁Monkey Patch用法实例解析,包括了Python猴子补丁Monkey Patch用法实例解析的使用技巧和注意事项,需要的朋友参考一下 属性在运行时的动态替换,叫做猴子补丁(Monkey Patch)。 为什么叫猴子补丁 属性的运行时替换和猴子也没什么关系,关于猴子补丁的由来网上查到两种说法: 1.这个词原来为Guerrilla Patch,杂牌军、游击队,

  • 本文向大家介绍ruby开发的交互式程序例子,包括了ruby开发的交互式程序例子的使用技巧和注意事项,需要的朋友参考一下 实现pry,ronin,msf类似的终端下交互功能,这里主要用到了ripl gem: 1.能够调用定义的方法,如help 2.能够执行系统命令 3.能够类似irb/pry进行ruby语言解析 安装: 示例 ripl这个gem,它也提供很多插件,如下是一个简单的终端下交互实现: 使