- Ruby 基礎
- Ruby - 首頁
- Ruby - 概述
- Ruby - 環境設定
- Ruby - 語法
- Ruby - 類和物件
- Ruby - 變數
- Ruby - 運算子
- Ruby - 註釋
- Ruby - IF...ELSE
- Ruby - 迴圈
- Ruby - 方法
- Ruby - 程式碼塊
- Ruby - 模組
- Ruby - 字串
- Ruby - 陣列
- Ruby - 雜湊表
- Ruby - 日期和時間
- Ruby - 範圍
- Ruby - 迭代器
- Ruby - 檔案 I/O
- Ruby - 異常
Ruby - 模組和Mixin
模組是將方法、類和常量組合在一起的一種方式。模組為您提供了兩個主要好處。
模組提供了一個名稱空間,並防止命名衝突。
模組實現了Mixin功能。
模組定義了一個名稱空間,一個沙盒,您的方法和常量可以在其中執行,而無需擔心被其他方法和常量覆蓋。
語法
module Identifier statement1 statement2 ........... end
模組常量與類常量的命名方式相同,以大寫字母開頭。方法定義也看起來很相似:模組方法的定義方式與類方法相同。
與類方法一樣,您可以透過在模組名稱前加上模組名稱和一個句點來呼叫模組方法,並且您可以使用模組名稱和兩個冒號來引用常量。
示例
#!/usr/bin/ruby # Module defined in trig.rb file module Trig PI = 3.141592654 def Trig.sin(x) # .. end def Trig.cos(x) # .. end end
我們可以使用相同的函式名稱但功能不同的定義另一個模組 -
#!/usr/bin/ruby # Module defined in moral.rb file module Moral VERY_BAD = 0 BAD = 1 def Moral.sin(badness) # ... end end
與類方法一樣,每當您在模組中定義方法時,您都指定模組名稱,後跟一個點,然後是方法名稱。
Ruby require 語句
require 語句類似於 C 和 C++ 的 include 語句以及 Java 的 import 語句。如果第三個程式想要使用任何已定義的模組,它只需使用 Ruby 的require語句載入模組檔案 -
語法
require filename
這裡不需要在檔名後面加上.rb副檔名。
示例
$LOAD_PATH << '.' require 'trig.rb' require 'moral' y = Trig.sin(Trig::PI/4) wrongdoing = Moral.sin(Moral::VERY_BAD)
這裡我們使用$LOAD_PATH << '.'讓 Ruby 知道必須在當前目錄中搜索包含的檔案。如果您不想使用 $LOAD_PATH,則可以使用require_relative從相對目錄中包含檔案。
重要 - 這裡,這兩個檔案都包含相同的函式名稱。因此,這將導致在包含呼叫程式時程式碼出現歧義,但模組避免了這種程式碼歧義,並且我們能夠使用模組名稱呼叫相應的函式。
Ruby include 語句
您可以將模組嵌入到類中。要將模組嵌入到類中,您可以在類中使用include語句 -
語法
include modulename
如果模組是在單獨的檔案中定義的,則需要在將模組嵌入到類中之前使用require語句包含該檔案。
示例
考慮以下在support.rb檔案中編寫的模組。
module Week
FIRST_DAY = "Sunday"
def Week.weeks_in_month
puts "You have four weeks in a month"
end
def Week.weeks_in_year
puts "You have 52 weeks in a year"
end
end
現在,您可以按如下方式將此模組包含在類中 -
#!/usr/bin/ruby
$LOAD_PATH << '.'
require "support"
class Decade
include Week
no_of_yrs = 10
def no_of_months
puts Week::FIRST_DAY
number = 10*12
puts number
end
end
d1 = Decade.new
puts Week::FIRST_DAY
Week.weeks_in_month
Week.weeks_in_year
d1.no_of_months
這將產生以下結果 -
Sunday You have four weeks in a month You have 52 weeks in a year Sunday 120
Ruby 中的 Mixin
在閱讀本節之前,我們假設您瞭解面向物件的概念。
當一個類可以從多個父類繼承特徵時,該類應該表現出多重繼承。
Ruby 不直接支援多重繼承,但 Ruby 模組還有另一種奇妙的用途。它們一舉消除了對多重繼承的需求,提供了名為Mixin的功能。
Mixin 為您提供了一種非常可控的方式來向類新增功能。但是,當 Mixin 中的程式碼開始與使用它的類中的程式碼互動時,它們的真正威力就會顯現出來。
讓我們檢查以下示例程式碼以瞭解 Mixin -
module A def a1 end def a2 end end module B def b1 end def b2 end end class Sample include A include B def s1 end end samp = Sample.new samp.a1 samp.a2 samp.b1 samp.b2 samp.s1
模組 A 包含方法 a1 和 a2。模組 B 包含方法 b1 和 b2。類 Sample 包含模組 A 和 B。類 Sample 可以訪問所有四個方法,即 a1、a2、b1 和 b2。因此,您可以看到類 Sample 從這兩個模組繼承。因此,您可以說類 Sample 顯示多重繼承或Mixin。