Ruby邊學(xué)邊記(二)

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ì)飛模塊的"飛"方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 簡(jiǎn)史 Ruby 出身于所謂的腳本語(yǔ)言家族,是一種解釋型、面向?qū)ο?、?dòng)態(tài)類型的語(yǔ)言 。解釋型,意味著Ruby代碼由解...
    alighters閱讀 660評(píng)論 0 5
  • Ruby是一門單一繼承的面向?qū)ο笳Z(yǔ)言,那么在內(nèi)部結(jié)構(gòu)上,它是以object為根節(jié)點(diǎn)的樹(shù)形結(jié)構(gòu)的類圖,那么我們?cè)赗u...
    falm閱讀 1,522評(píng)論 0 1
  • 這幾天在看《Blake Mirror 》,看得很慢,幾十分鐘的影片之后只有震撼。 編劇Charlie Brooke...
    荷亦閱讀 398評(píng)論 0 0
  • 我獨(dú)自居住在無(wú)人的島嶼 日光、青草、籬笆 將我分解 一排房屋不知是何人所留 也許是第一個(gè)探索者 他克服風(fēng)暴 在荒涼...
    容錚閱讀 260評(píng)論 0 1

友情鏈接更多精彩內(nèi)容