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 後,馬上就會觸發。
沒有留言:
張貼留言