Class類是Module的子類,類是一種特殊形式的模塊,這個可看我的這篇文章 一步一步學Ruby(五): Class, Module, Object,Kernel的關係 。
我們知道最頂級的類是Object,那麼最頂級的模塊就是Kernel
我們使用模塊的的主要目的是用來組織代碼,模塊化代碼,有點類似命名空間,但卻有很大的不同
一、創建和使用模塊
用module關鍵字來定義模塊
module沒有實例,我們使用時把module混合到類中來使用,我們也可以這麼理解,把Module裏的內容拷貝一份放到類裏,成爲類的一部分
我們可以把模塊放到一個單獨的文件裏,然後使用時進行加載,看下面的示例,假設我們有一個project.rb的文件,包含了Project模塊
我們將Project混合到Manager類裏
注意: 在使用require或load時,請求加載的內容放到引號裏,而inclue不是用引號,這是因爲require或load使用字符串做爲參數,而include使用常量形式的模塊名,require和load使用字符串變量也可以.
二、混合進模塊的類的方法查找
上面say方法查找路徑爲 D類-->D類裏包含的模塊-->C類-->C類包含的模塊......>Object-->Kernel,當找到第一個時,搜索停止。
同名方法的查找,後面覆蓋前面的
用super提升查找路徑(調用查找路徑上下一個匹配的方法),同樣我們使用super可以調用父類的同名方法,initialize是自動執行
- super 調用時,自動傳遞當前的參數
- super(),不傳任何參數
- super(a,b,c) 傳遞指定的參數
三、模塊和類可以相互嵌套
module也可以包含類,但調用時需要這樣使用 模塊名::類名.new
本文作者: 王德水