Ruby 模組(Module)
模組(Module)是一種把方法、類和常量組合在一起的方式。模組(Module)為您提供了兩大好處。
- 模組提供了一個命名空間和避免名字衝突。
- 模組實現了 mixin 裝置。
模組(Module)定義了一個命名空間,相當於一個沙盒,在裏邊您的方法和常量不會與其他地方的方法常量衝突。
模組類似與類,但有以下不同:
- 模組不能實例化
- 模組沒有子類
- 模組只能被另一個模組定義
語法
模組常量命名與類常量命名類似,以大寫字母開頭。方法定義看起來也相似:模組方法定義與類方法定義類似。
通過類方法,您可以在類方法名稱前面放置模組名稱和一個點號來調用模組方法,您可以使用模組名稱和兩個冒號來引用一個常量。
實例
我們可以定義多個函數名稱相同但是功能不同的模組:
實例
就像類方法,當您在模組中定義一個方法時,您可以指定在模組名稱後跟著一個點號,點號後跟著方法名。
Ruby require 語句
require 語句類似於 C 和 C++ 中的 include 語句以及 Java 中的 import 語句。如果一個第三方的程式想要使用任何已定義的模組,則可以簡單地使用 Ruby require 語句來加載模組檔:
語法
語法
在這裏,檔擴展名 .rb 不是必需的。
實例
在這裏,我們使用 $LOAD_PATH << '.' 讓 Ruby 知道必須在當前目錄中搜索被引用的檔。如果您不想使用 $LOAD_PATH,那麼您可以使用 require_relative 來從一個相對目錄引用檔。
注意:在這裏,檔包含相同的函數名稱。所以,這會在引用調用程式時導致代碼模糊,但是模組避免了這種代碼模糊,而且我們可以使用模組的名稱調用適當的函數。
Ruby include 語句
您可以在類中嵌入模組。為了在類中嵌入模組,您可以在類中使用 include 語句:
語法
如果模組是定義在一個單獨的檔中,那麼在嵌入模組之前就需要使用 require 語句引用該檔。
實例
假設下麵的模組寫在 support.rb 檔中。
現在,您可以在類中引用該模組,如下所示:
實例
這將產生以下結果:
Sunday You have four weeks in a month You have 52 weeks in a year Sunday 120
Ruby 中的 Mixins
在閱讀本節之前,您需要初步瞭解面向對象的概念。
當一個類可以從多個父類繼承類的特性時,該類顯示為多重繼承。
Ruby 不直接支持多重繼承,但是 Ruby 的模組(Module)有另一個神奇的功能。它幾乎消除了多重繼承的需要,提供了一種名為 mixin 的裝置。
Ruby 沒有真正實現多重繼承機制,而是採用成為mixin技術作為替代品。將模組include到類定義中,模組中的方法就mix進了類中。
讓我們看看下麵的示例代碼,深入瞭解 mixin:
實例
- 模組 A 由方法 a1 和 a2 組成。
- 模組 B 由方法 b1 和 b2 組成。
- 類 Sample 包含了模組 A 和 B。
- 類 Sample 可以訪問所有四個方法,即 a1、a2、b1 和 b2。