模塊是組合在一起的方法,類和常量。模塊兩個主要好處:
- 模塊提供了一個命名空間,并避免名稱沖突。
- 模塊實(shí)現(xiàn)混合工廠。
模塊定義了一個命名空間,一個沙箱中方法和常量可以自由使用,而不必?fù)?dān)心踩到其他的方法和常數(shù)。
語法:
module Identifier
statement1
statement2
...........
end
就像被命名為類常量模塊中的常量,首字母大寫。定義的方法看起來很相似,模塊定義方法就像類的方法。
調(diào)用一個模塊方法和類方法一樣,通過模塊的名稱它名字前,引用一個常數(shù)使用該模塊的名稱和兩個冒號。
例子:
#!/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
我們可以定義一個函數(shù)名相同,但在不同的功能模塊:
#!/usr/bin/ruby
# Module defined in moral.rb file
module Moral
VERY_BAD = 0
BAD = 1
def Moral.sin(badness)
# ...
end
end
和類的方法一樣,當(dāng)在一個模塊中定義的方法,指定模塊名稱后面跟著一個點(diǎn),那么該方法的名稱。
Ruby require 語句:
require 語句聲明的是類似于 C/C++ 的 include語句 和 Java 的 import 語句。如果有第三個程序要使用任何定義的模塊,它可以簡單地使用Ruby require 語句加載的模塊文件:
語法:
require filename
在這里,它不是必需的 .rb 文件名擴(kuò)展。
例如:
require 'trig.rb'
require 'moral'
y = Trig.sin(Trig::PI/4)
wrongdoing = Moral.sin(Moral::VERY_BAD)
重要: 在這里,這兩個文件都包含相同的函數(shù)名。因此,這將導(dǎo)致在代碼中的歧義,同時(shí)包括在調(diào)用程序,但的模塊避免這個代碼模糊,我們能夠調(diào)用適當(dāng)?shù)墓δ苣K的名稱。
Ruby include 語句:
可以嵌入在一個類模塊。要在一個類中嵌入模塊,可以使用類中 include 語句:
語法:
include modulename
如果一個模塊被定義在單獨(dú)的文件,那么它需要包含該文件需要隱藏于公開的模塊在一個類的 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
現(xiàn)在,可以在如下一類包括這個模塊:
#!/usr/bin/ruby
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
這將產(chǎn)生以下結(jié)果:
Sunday
You have four weeks in a month
You have 52 weeks in a year
Sunday
120
Ruby中混合類型:
通過本節(jié)之前,假設(shè)有面向?qū)ο蟮母拍詈椭R。
當(dāng)一個類可以從多個父類繼承的特點(diǎn),類應(yīng)該顯示多重繼承。
Ruby沒有直接中suppoprt多繼承,但Ruby的模塊有另一個精彩使用。他們幾乎消除多重繼承的需要,提供了一個工廠稱為混入。
混合類型給一個精彩的控制方式增加功能類。在代碼中混合類,使用它的代碼能進(jìn)行進(jìn)行交互。
讓我們來看看下面的示例代碼來獲得混合類型了解:
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。類示例包括兩個模塊A和B類的樣品可以訪問所有四種方法,即a1, a2, b1 或 b2。因此,可以看到這個類繼承自兩個模塊樣品。因此,可以說類的示例顯示了多重繼承或混入。
您可能感興趣的文章:- Ruby中的block代碼塊學(xué)習(xí)教程
- 詳解Ruby中的代碼塊對象Proc
- Ruby中編寫類與模塊的風(fēng)格指南
- Ruby中關(guān)于模塊的一些基礎(chǔ)知識
- 詳解Ruby中的塊的知識
- Ruby中使用SWIG編寫ruby擴(kuò)展模塊實(shí)例
- 使用Ruby re模塊創(chuàng)建復(fù)雜的正則表達(dá)式
- ruby 模塊
- 深入理解Ruby中的代碼塊block特性