天天看點

ruby學習筆記(9)-别名(alias)與方法取消(undef,remove_method)

先來看别名,ruby中可以給方法或全局變量起一個别名,有意思的是:方法别名定義後,即使對應的方法在後面的代碼中重新定義(即修改内部實作)後,别名仍然可以調用到修改前的方法,而全局變量則不行。

再來說說方法取消:

利用undef或undef_method,可以将類的方法取消定義(也可以了解為徹底删除掉),這沒什麼不好了解,但要注意的是:如果一個類繼承自父類,并且又定義了與父類同名的方法,用undef取消該方法後,将連帶父類的同名方法一起取消(其實也很正常:動态語言世界裡,子類重定義了父類繼承得來的重名方法,相當于覆寫了該方法,是以子類執行個體調用時也隻能調用到子類自身的同名方法,一旦取消後,該方法[不管是父類的,還是子類的]将與子類再無任何牽挂)

如果我們隻想取消子類中的方法,而保留父類繼承得來的同名方法,怎麼辦?答案就是:remove_method,把上一段代碼的最後部分改成:

可以看到,調用s1.meth時,使用的是父類的meth方法

作者:菩提樹下的楊過