Ruby元編程筆記 - 方法

Dynamic Method

通過send()去動態(tài)調(diào)用方法:

obj.send(:method, values)
obj.send('method', values)

在Ruby2.2.2中,send()依然可以調(diào)用私有方法。為了避免這個問題我們可以用public_send()來做限制。

通過define_method來動態(tài)定義方法,如:

define_method(name) do |args|
  ...
end

注意可以通過內(nèi)省(introspection)來取消更多的重復(fù)代碼。

method_missing()

覆寫method_missing()的時候要注意以下幾點(diǎn):

  1. 必須對請求做判斷,當(dāng)請求不符合條件的時候直接調(diào)用super;
  2. 覆寫respond_to?,保持邏輯一致性;
  3. 注意不要讓方法重名,如果難以避免的話,那么可以新建一個“白板類(BlankSlate)”,使用undef_method()移除不需要的類。:__send__, :__id__, :instance_eval是必須要留下的。

額外知識點(diǎn):delegate、const_missing()、remove_method()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評論 19 139
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,068評論 0 9
  • Ruby是一門動態(tài)語言,動態(tài)創(chuàng)建與調(diào)用方法是其中一個體現(xiàn)。 動態(tài)方法 動態(tài)調(diào)用方法(動態(tài)派發(fā)) 動態(tài)調(diào)用方法,是指...
    未必治撕大叔閱讀 1,138評論 2 8
  • 對象模型 所有class定義之外的代碼默認(rèn)運(yùn)行在頂級對象main中。 打開類 ruby的class更像是一個作用于...
    五月的約修亞閱讀 3,538評論 0 4
  • 路邊或者角落或者辦公桌,都是正確的必然。只要還有各種狀態(tài)就算存在。有的很好看但是很遠(yuǎn),有的很香但不斑斕。換個角度,...
    泡豇豆下干飯閱讀 273評論 0 0

友情鏈接更多精彩內(nèi)容