一步一步學Ruby(十三):Ruby模塊

Class類是Module的子類,類是一種特殊形式的模塊,這個可看我的這篇文章 一步一步學Ruby(五): Class, Module, Object,Kernel的關係

我們知道最頂級的類是Object,那麼最頂級的模塊就是Kernel

我們使用模塊的的主要目的是用來組織代碼,模塊化代碼,有點類似命名空間,但卻有很大的不同

一、創建和使用模塊

用module關鍵字來定義模塊

image

module沒有實例,我們使用時把module混合到類中來使用,我們也可以這麼理解,把Module裏的內容拷貝一份放到類裏,成爲類的一部分

image

我們可以把模塊放到一個單獨的文件裏,然後使用時進行加載,看下面的示例,假設我們有一個project.rb的文件,包含了Project模塊

image

我們將Project混合到Manager類裏

image

注意: 在使用require或load時,請求加載的內容放到引號裏,而inclue不是用引號,這是因爲require或load使用字符串做爲參數,而include使用常量形式的模塊名,require和load使用字符串變量也可以.

二、混合進模塊的類的方法查找

image

上面say方法查找路徑爲 D類-->D類裏包含的模塊-->C類-->C類包含的模塊......>Object-->Kernel,當找到第一個時,搜索停止。

同名方法的查找,後面覆蓋前面的

image

用super提升查找路徑(調用查找路徑上下一個匹配的方法),同樣我們使用super可以調用父類的同名方法,initialize是自動執行

image

  • super 調用時,自動傳遞當前的參數
  • super(),不傳任何參數
  • super(a,b,c) 傳遞指定的參數

三、模塊和類可以相互嵌套

module也可以包含類,但調用時需要這樣使用 模塊名::類名.new

image

 

本文作者: 王德水

轉載於:https://my.oschina.net/thinkgem/blog/713331