Ruby邊學(xué)邊記(二)
Ruby模塊
模塊在Ruby里面有兩個(gè)作用
- 把功能相同的方法放在同一個(gè)名稱之下
- 方便調(diào)用方法
模塊(Module)是一種把方法、類和常量組合在一起的方式。模塊(Module)為您提供了兩大好處。
- 模塊提供了一個(gè)命名空間和避免名字沖突。
- 模塊實(shí)現(xiàn)了 mixin 裝置。
模塊(Module)定義了一個(gè)命名空間,相當(dāng)于一個(gè)沙盒,在里邊您的方法和常量不會(huì)與其他地方的方法常量沖突。
模塊類似與類,但有一下不同:
- 模塊不能實(shí)例化
- 模塊沒(méi)有子類
- 模塊只能被另一個(gè)模塊定義
1.模塊示例
創(chuàng)建一個(gè)Hello模塊的范例
模塊方法定義與類方法定義類似。
ruby中的module與.net中的namespace有點(diǎn)類似,可以用來(lái)區(qū)分同名但屬于不同開(kāi)發(fā)者(或組織)的代碼。
#!/usr/bin/ruby
module Hello #模塊名的首寫字母與類一樣都必須大寫
include Math #包含一個(gè)模塊(可以理解為c#中的引用命名空間),假設(shè)Math模塊中有sqrt方法
def self.hello_python #self為關(guān)鍵字
print "Hello Python!"
end
def self.hello_ruby
print "Hello Ruby!"
end
name = "Ruby"
end
puts Hello::name #引用常量用雙冒號(hào)
puts Math::sqrt() #通過(guò)完整引用來(lái)調(diào)用Math中的sqrt方法
puts Math.sqrt() #效果與上面相同
Hello.hello_python
Hello.hello_ruby #調(diào)用模塊中的方法
這里用一個(gè)案例說(shuō)明可能會(huì)更好理解
定義一個(gè)鴨子類,會(huì)游泳,有游泳方法;野鴨不僅會(huì)游泳還會(huì)飛;黑鴨就是普通的鴨子;所以可以這么設(shè)計(jì):
#鴨子類
class Duck
def swim
print self.class , " can swim...\n";
end
end
#"會(huì)飛的"模塊
module FlyModule
def fly
print " and I can fly...\n"
end
end
#野鴨(會(huì)飛,會(huì)游)
class Mallard < Duck
include FlyModule #導(dǎo)入模塊后,該類即具有模塊中定義的方法(可以理解為實(shí)現(xiàn)了接口)
end
#黑鴨(只會(huì)游泳)
class Coot < Duck #繼承Duck類
def Color
"Black"
end
end
aCoot = Coot.new #實(shí)例化黑鴨對(duì)象
aCoot.swim; #可以調(diào)用基類鴨子的swim方法
aMallard = Mallard.new #實(shí)例化野鴨對(duì)象
aMallard.swim;
aMallard.fly; #可以調(diào)用會(huì)飛模塊的"飛"方法