Ruby模組是方法和常量的集合。 模組方法可以是實例方法或模組方法。實例方法是包含模組的類中的方法。
可以在不創建封裝對象的情況下調用模組方法,但是實例方法不能這麼直接調用。
Ruby模組類似於類,因為它們包含方法,類定義,常量和其他模組的集合。Ruby模組可定義為類。但無法使用模組來創建對象或子類。也沒有繼承的模組層次結構。
模組基本上主要有兩個目的:
- 它們作為命名空間,防止對象名字衝突。
- 它們允許
mixin
工具在類之間共用功能。
語法
module ModuleName
statement1
statement2
...........
end
模組名稱應以大寫字母開頭。
模組命名空間
在編寫較大的檔時,需要生成大量可重用的代碼。 這些代碼被組織成類,可以插入到一個檔中。
例如,如果兩個人在不同的檔中具有相同的方法名稱。 並且這兩個檔都需要包含在第三個檔中。 那麼它可能會產生問題,因為這兩個包含的檔中的方法名稱是相同的。
這裏,模組機制發揮作用。 模組定義一個命名空間,您可以在命名空間中定義方法和常量,而不用管其他方法和常量執行。
示例:
假設在modules-file1.rb
中,定義了不同類型的圖書館書籍,如小說,恐怖等。
在modules-file2.rb
中,定義了閱讀的小說數量,包括小說小說。
在modules-file3.rb
中,需要加載檔modules-file1.rb
和modules-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
由方法bella
和ana
組成。 模組Job
由方法editor
和writer
組成。Combo
類包括兩個模組,由於Combo
可以訪問所有四種方法。 因此,Combo
類作為mixin
混合類型使用。