Ruby模組


Ruby模組是方法和常數的集合。 模組方法可以是範例方法或模組方法。範例方法是包含模組的類中的方法。

可以在不建立封裝物件的情況下呼叫模組方法,但是範例方法不能這麼直接呼叫。

Ruby模組類似於類,因為它們包含方法,類定義,常數和其他模組的集合。Ruby模組可定義為類。但無法使用模組來建立物件或子類。也沒有繼承的模組層次結構。

模組基本上主要有兩個目的:

  • 它們作為名稱空間,防止物件名字衝突。
  • 它們允許mixin工具在類之間共用功能。

語法

module ModuleName  
   statement1  
   statement2  
   ...........  
end

模組名稱應以大寫字母開頭。

模組名稱空間

在編寫較大的檔案時,需要生成大量可重用的程式碼。 這些程式碼被組織成類,可以插入到一個檔案中。

例如,如果兩個人在不同的檔案中具有相同的方法名稱。 並且這兩個檔案都需要包含在第三個檔案中。 那麼它可能會產生問題,因為這兩個包含的檔案中的方法名稱是相同的。

這裡,模組機制發揮作用。 模組定義一個名稱空間,您可以在名稱空間中定義方法和常數,而不用管其他方法和常數執行。

範例:

假設在modules-file1.rb中,定義了不同型別的圖書館書籍,如小說,恐怖等。

modules-file2.rb中,定義了閱讀的小說數量,包括小說小說。

modules-file3.rb中,需要載入檔案modules-file1.rbmodules-file2.rb。這裡我們將使用模組機制。

建立檔案:modules-file1.rb ,其程式碼如下所示 -

#!/usr/bin/ruby   

# Module defined in file1.rb file   

module Library   
   num_of_books = 300   
   def Library.fiction(120)   
   # ..   
   end   
   def Library.horror(180)   
   # ..   
   end   
end

建立檔案:modules-file2.rb ,其程式碼如下所示 -

#!/usr/bin/ruby   

# Module defined in file2.rb file   

module Novel   
   total = 123   
   read = 25   
   def Novel.fiction(left)   
   # ...   
   end   
end

建立檔案:modules-file3.rb ,其程式碼如下所示 -

require "Library"   
require "Novel"   

x = Library.fiction(Library::num_of_books)   
y = Novel.fiction(Novel::total)

通過在模組名稱後帶點(.)符號來呼叫模組方法,並使用模組名稱和兩個冒號參照常數。

模組混合

Ruby不支援多重繼承。 模組消除了在Ruby中使用mixin的多重繼承的需要。模組沒有範例,因為它不是一個類。 但是,一個模組可以包含在一個類中。

當您在類中包含模組時,該類將可以存取模組的方法。

範例:

module Name   
   def bella   
   end   
   def ana   
   end   
end   
module Job   
   def editor   
   end   
   def writer   
   end   
end   

class Combo   
include Name   
include Job   
   def f   
   end   
end   

final=Combo.new   
final.bella   
final.ana   
final.editor   
final.writer   
final.f

這裡,模組Name由方法bellaana組成。 模組Job由方法editorwriter組成。Combo類包括兩個模組,由於Combo可以存取所有四種方法。 因此,Combo類作為mixin混合型別使用。