2014年12月11日 星期四

[ Ruby Gossip ] Advance : 方法 - *_missing、*method_added 方法

Source From Here 
Preface 
如果傳遞訊息給物件,而物件最終沒有合適的方法可以回應訊息,則會呼叫 method_missing 方法,傳入代表方法的 Symbol 實例、呼叫方法時的引數與程式區塊。例如: 
 

*_missing、*method_added 方法 
在 BasicObject 中看過實際 method_missing 的應用。另一個常數應用,就是不以 is a 方式增加類別功能(也就是不使用繼承),而以 has a 方式動態為類別實例增加功能時,為了不逐一定義同名方法時,會使用如下方式
 

如果類別定義有 const_missing 方法,在指定的常數不在類別中定義時就會呼叫。例如: 
 

如果類別定義有 method_added 方法,之後若類別中定義了實例方法,就會呼叫該方法: 
 

如果實例上定義有 singleton_method_added 方法,之後若該實例定義了單例方法,就會呼叫該方法: 
 

從上例中可以看到,由於 singleton_method_added 本身也是單例方法,因而在實例上定義 singleton_method_added 後,馬上就會觸發。

沒有留言:

張貼留言

[JS 文章收集] 用 Node.js 學 JavaScript 語言(1)簡介與安裝

Source From  Here   簡介   Node.js  是 Ryan Dahl 基於 Google 的 V8 引擎於 2009 年釋出的一個 JavaScript 開發平台,主要聚焦於 Web 程式的開發,通常用被來寫網站。但是,要開發網站就勢必要把「 HTML,...