什麼是模組
模組(module)是ruby特有的功能之一。類用來表現具有資料與行為(程式)的"東西",
而模組大致來說,則是只有程式部分的集合體。類與模組最大的不同在於:
1.模組不能建立例項
2.模組不能繼承
模組的用法
(1)提供命名空間
命名空間(namespace)是為了讓方法、常數、類名稱不互相衝突而設計的機制。命名時
名稱簡潔明快雖然是個好習慣,但像size、start這種太普通的名稱可能就很容易重複。
這時,定義成模組的內部名稱,可防止名稱的衝突。
例如:ruby將取得檔案資訊的相關功能都放在file模組裡。以模組形式提供的方法
必須使用"模組名.方法名"的方式呼叫。以這種形式呼叫的方法又稱為模組函式。
#查詢檔案是否存在
p file.exist?("text.txt") #=>true
#檔案大小
p file.size("text.txt") #=>6389
當模組內部定義的方法及常數的名稱沒有與現在命名空間衝突時,省略模組名稱會比較方便.
使用include可以將模組所擁有的方法名稱與常數名稱讀入現在的命名空間裡。
例如,數值運算用的math模組:
# 圓周率(常數)
p math::pi #=>3.141592653589793
# 2的平方根
p math.sqrt(2) #=>1.4142135623730951
include math
p pi #=>3.141592653589793
p sqrt(2) #=>1.4142135623730951
像這樣,將相關的各種功能整理成乙個模組,可以以相同的命名空間來管理這些功能。
(2)以mix-in方式提供功能
將模組混進類裡,成為」mix-in「。在類的定義內使用include,可以將模組裡所定義的方
法與常數納入類定義裡。
module mymodule
# 想要共同提供的方法等
end
class myclass1
include mymodule
#myclass1 所特有的方法
end
class myclass2
include mymodule
#myclass2 所特有的方法
end像這樣,就能將myclass1與myclass2雙方共同的功能定義在mymodule中。這與類繼承很
相似,但用於這種時候:
a.兩個類只是具有相似功能,並不想歸類於相同型別(類)時;
b.ruby的繼承不允許同時又多個父類,已繼承別的父類時,就無法再以繼承的方式加上其它功能
這些情況就可以使用mix-in更彈性地處理。
繼承與mix-in的關係將在後續文章中再詳細介紹。
ruby入門 模組
模組 module 和類同一級 和類類似,但是不能例項化 可以被類包含 self可以指定模組方法 module demomodel def foo1 common method puts foo1.common method enddef self.foo2 module method puts f...
ruby 類和模組
1 所有的類名必須以大寫字母開頭,self關鍵字表示定義的類 類例項 ruby view plain copy class point attr accessor x,y include enumerable def initialize x 0,y 0 x x y y end 這裡並沒有做型別檢查...
Ruby的根模組命名空間
如果你要定製rails的違例輸出頁面的話的,一般會用這樣的 code def rescue action in public exception case exception when actioncontroller unknownaction render with layout when ac...