何谓猴子补丁(Monkey Patch)?在动态语言中,不修改源代码而对功能进行追加和变更。
使用猴子补丁的目的:
1、追加功能
2、功能变更
3、修正程序错误
4、增加钩子,在执行某个方法的同时执行一些其他的处理,如打印日志,实现AOP等,
5、缓存,在计算量很大,结算之后的结果可以反复使用的情况下,在一次计算完成之后,对方法进行替换可以提高处理速度。
Ruby的类都是开放类,即在类定义之后还可以任意添加内容, 这就使得在Ruby中使用猴子补丁变得特别容易了。另外,Ruby还提供了对方法、类和模块的进行操作的功能,让我们使用猴子补丁更加得心应手。Ruby提供的基本功能如下:
alias:给方法另起别名
include:引入其他模块的方法
remove_method: 取消本类中的方法
undef:取消方法
例子:
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
end
猴子补丁是一个非常诱人的功能,尤其是在java的那个改个标点符号都要重新编译、打包的世界。因此,老衲内心十分的喜欢,分享给大家,但是剑有双刃,如若使用不当,也会伤着自己。因此在使用猴子补丁的时候,还应注意如下事项:
1、基本上只追加功能
2、进行功能变更时要谨慎,尽可能的小规模
3、注意相互调用
分享到:
相关推荐
Monkey Patch,又称猴子补丁,是Ruby编程语言中一种独特的编程技术,允许程序员在程序运行时动态地修改或扩展已存在的类或模块。这一技术在Ruby社区中被广泛应用,尤其在处理第三方库的功能不足或者需要临时修复问题...
Ruby的类都是开放类,即在类定义之后还可以任意添加内容, 这就使得在Ruby中使用猴子补丁变得特别容易了。另外,Ruby还提供了对方法、类和模块的进行操作的功能,让我们使用猴子补丁更加得心应手。Ruby提供的基本...
猴子猎人找出Ruby库猴子修补程序。用法运行monkey-hunter然后输入要检查的本地宝石的名称。 $ monkey-hunter wasabiI, [2014-12-31T17:35:05.065213 # 92062] INFO -- : Loading the ruby standard libraryI, [2014-...
重装Ruby Ruby中用于数组,哈希,可枚举,字符串,对象和日期的有用方法和猴子补丁的集合。 通过使生活更轻松和编码更自然而受到驱动。 该库与其他库之间的区别在于,所有猴子修补均以选择加入的方式执行,因为您不...
Rails的有用方法和猴子补丁的集合 该库与其他库的区别在于,所有猴子修补均以选择加入的方式执行,因为您不应该使用自己不知道的方法。 # Gemfile gem 'rearmed_rails' 运行rails g rearmed_rails:setup在config/...
这个库是有用的方法和猴子补丁的集合,这些方法和猴子补丁适用于Javascript中的数组,对象,数字和字符串。 就像编写Ruby代码一样,开始编写Javascript! 在浏览器和NodeJS中均可使用。 缩小并压缩成5.1kb。 安装...
guard_against_physical_delete guard_against_physical_delete是ActiveRecord的猴子补丁。 此修补程序可防止物理删除记录。 设置逻辑删除列名称。 (默认是:deleted_at) Logical . logical_delete_column = :...
Xorcist :ghost: 快速实现跨平台,无猴子补丁的字符串XOR。 是的,这也意味着JRuby。用法require 'xorcist'a , b = 'a' , 'b'Xorcist . xor ( a , b ) # => "\u0003"a # => 'a'Xorcist . xor! ( a , b ) # => "\u...
Compass Rails 源地图一个小猴子补丁,用于启用带有指南针轨道的源地图严重基于 该 gem 不能与指南针一起工作,因为指南针导轨修补了默认的 sass\sprockets 代码安装将此行添加到应用程序的 Gemfile 中: group :...
如果你粗心地为某个类添加了新功能,同时覆盖了类原来的功能,进而影响到其他部分的代码,这样的patch称之为猴子补丁(Monkeypatch) 类与模块 Ruby的class关键字更像是一个作用域操作符,而不是类型声明语句。class...
可以使其在MRI Ruby中运行,但是可能需要使用OCI8的不同数据库接口。 如何创建PLSQL单元测试套件 测试助手 首先,为测试创建一个新目录。 然后创建一个名为test_helper.rb的文件,该文件应包含以下内容: require...
Decoradar实际上非常简单且没有魔法(零猴子补丁,零自动强制),旨在将ActiveModel :: Serializer引入纯Ruby对象。 Decoradar将为您带来什么? ActiveModel::Serializer DSL样式。 自由而明确的魔术:没有猴子...
任何地方都没有猴子补丁 支持通用对象,尤其是枚举器和嵌套的通用对象 支持常见的标准库对象,例如Set 可通过YAML自定义颜色模式 安装 使用以下命令安装gem: $ gem install wirb 或将其添加到您的Gemfile
计数句子实验室目标练习在类上定义实例方法。 练习定义实例方法,这些实例方法使用self关键字对调用该方法的对象进行操作。 了解有关猴子修补的... 猴子打补丁很危险! 例如,如果您决定猴子修补Ruby的String类以产生
AnyCable使用与ActionCable相同的协议,因此您可以使用其而无需任何猴子补丁。 重要说明这是即将发布的v1.0版本的自述文件。 对于v0.6.x,请参阅分支的自述文件。 要求 Ruby> = 2.5 Redis(用于制作中的广播,请...
随时随地停止ActiveSupport ... 编写的任何Ruby软件都可以在无猴子补丁的环境中或在有猴子补丁的环境中工作。 当然:运气好的话,两者都有很多工作。 但是,您的宝石不会随着ActiveRecord的下一个版本(它本
数数句子 目标 练习在类上定义实例方法。 练习定义实例方法,这些实例方法使用self关键字对调用该方法的对象进行操作。... 猴子打补丁很危险! 例如,如果您决定猴子修补Ruby的String类以产生快速修复程序,从而缩短程
打开类和猴子补丁 在Ruby中,类定义的方法和其他的语句没有任何区别,都是一行一行的执行下去的。如下例子: class Example def method_1 puts method 1 end end class Example def method_2 puts method 2 ...