程式扎記: [ Ruby Gossip ] Advance : 方法 - *_missing、*method_added 方法

標籤

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 後,馬上就會觸發。

沒有留言:

張貼留言

網誌存檔