Ruby使用Monkey Patch猴子補丁方式進行程式開發的樣本_ruby專題

來源:互聯網
上載者:User

猴子補丁(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、注意相互調用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.