ruby中的模組

2021-06-15 02:11:33 字數 1488 閱讀 2842

什麼是模組

模組(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...