ruby宣告式語法的實現程式碼
在ActiveRecord可以用很方便的宣告方式來定義model之間的關聯關係,例如:
class Topic < ActiveRecord::Base
has_many :posts
belongs_to :user
end
has_many和belongs_to其實是Topic類的class method,標準寫法是:
class Topic < ActiveRecord::Base
_many(:posts)
ngs_to(:user)
end
那麼has_many可以給我們帶來什麼呢?類方法has_many在被執行的時候,給Topic的物件例項添加了一系列方法:posts, posts<<, ......等等。所以當我們在model裡面宣告has_many,belongs_to等物件關係的時候,一系列相關的物件方法就被自動新增進來了。 讓我們來自己試試看吧:
複製程式碼 程式碼如下:
module M
def uded(c)
nd(G)
end
module G
def generate_method(*args)
do |method_name|
define_method(method_name) { puts method_name }
end
end
end
end
class C
include M
generate_method :method1, :method2
end
c =
od1
od2
我們定義了一個宣告generate_method,可以接受多個symbol,來動態的建立同名的方法。現在我們在類C裡面使用這個宣告:generate_method :method1, :method2,當然我們需要include模組M。為什麼ActiveRecord的model不需要include相關的模組呢?當然是因為Topic的父類ActiveRecord::Base已經include了模組Associations了。
類C通過include模組M,呼叫了模組M的一個included回撥介面,讓類C去extend模組G,換句話來說就是,通過include模組M,來給類C動態新增一個類方法generate_method。
這個generate_method被定義在模組G當中,它接受一系列引數,來動態建立相關的方法。於是我們就實現了這樣的`DSL功能:
通過在類C裡面宣告generate_method :method1, :method2,讓類C動態的添加了兩個例項方法method1,method2,是不是很有意思? 實際上rails的物件關聯宣告也是以同樣的方式實現的。
-
轉讓宣告書5篇
轉讓宣告書1全體著作權人:遵照《中華人民共和國著作權法》,自本宣告書籤署之日起,上述論文全體著作權人同》中文版和英文版上,並將全體著作權人就上述論文(各意:上述論文將刊登在《種語言版本)所享有的複製權、發行權、資訊網路傳播權、翻譯權、彙編權在全世界範...
-
道歉的宣告大全(15篇)
道歉的宣告19月27日,娛樂頻道一名圖片編輯對電影釋出會圖片進行了錯誤處理,造成了不良的影響。有熱心網友指正後我們發現了這個錯誤,該文章現已更正,我們將引以為戒並繼續優化工作流程。在此,我們特向電影製片方、演員趙小姐及廣大網友致歉,並衷心感謝網友的指正。xx...
-
員工離職宣告通用15篇
員工離職宣告1尊敬的xxx:感謝您在此前一直對本公司的信任與支援,由於本公司業務人員的人事變動給您帶來的不便,盡請諒解。願您在以後的日子裡生意興隆,財源滾滾!原公司經營人員xx已於20xx年x月x日正式離職。我公司鄭重宣告:一、自20xx年x月x日起已經停止xx以我公司...
-
助學貸款續貸聲明範文100字(精選5篇)
新的學期即將開始,很多選擇助學貸款的同學需要通過辦理續貸手續來繼續貸款完成自己的學業,續貸的手續比較簡單,以下就是小編收集的助學貸款續貸聲明範文100字(精選5篇),歡迎鑑賞。助學貸款續貸宣告1xx銀行:我是xx大學xx學院的一名大x學生,上個學年曾申請過貴行的生源...
相關文章
- 機器學習和資料探勘的就業前景如何,實現的話一般用C++還是python,比較擅長java和objc,準ruby程式設計師
- 會考英語優秀作文範文 Lucky Numbers
- 關於Buying pictures的九年級英語作文
- 防彈少年團(BTS)butterfly歌詞諧音現場版視訊
- 往屆會考英語滿分作文:Lucky Numbers
- Cry On My Shoulder中英雙語歌詞現場版視訊
- 例項講解Ruby使用設計模式中的裝飾器模式的方法參考
- vocabulary是什麼意思 vocabulary中文釋義-短語-例句
- 火星哥Bruno Mars超經典歌曲《Marry You》歌詞現場版視訊
- Justin Bieber《Baby》中英歌詞演唱會現場版視訊