ruby學習筆記(5)-模組module的運用

來源:互聯網
上載者:User

ruby中的module與.net中的namespace有點類似,可以用來區分同名但屬於不同開發人員(或組織)的代碼。

下面的代碼,定義了一個Me模組,裡面的sqrt與Math模組中的sqrt重名,另外還有一個重名常量PI

#定義一個模組(有點類似.net中的命名空間)module Medef sqrt(num1,num2=-1)return "num1=#{num1},num2=#{num2}"endPI = 3.14;endputs Math::PI #在未include任何模組之前,只能通過完整引用來引用常量puts Math.sqrt(2) #引用方法用點,引用常量用雙冒號puts "*" * 50 #列印50個*做為分隔線include Math #包含一個模組(可以理解為c#中的引用命名空間)puts  sqrt(2) #這裡調用的是Math中的sqrt方法puts "*" * 50puts Me::PIinclude Meputs  sqrt(2) #這裡調用的是Me中的sqrt方法puts  sqrt(1,2) #同上puts  PIputs "*" * 50puts Math::sqrt(2) #通過完整引用來調用Math中的sqrt方法puts Math.sqrt(2) #效果與上面相同puts "*" * 50 

運行結果:

3.14159265358979
1.4142135623731
**************************************************
1.4142135623731
**************************************************
3.14
num1=2,num2=-1
num1=1,num2=2
3.14
**************************************************
1.4142135623731
1.4142135623731
**************************************************

另外模組還能用來實作類別似"介面"的效果,比如有這麼一個情境:

一個動物遊戲中,有N種鴨子,所有的鴨子都會遊泳,但野鴨還能飛,按照傳統OO的做法,我們會定義一個Duck基類,然後所有鴨子都繼承自它,然後再弄一個IFly介面,讓“野鴨”類實現該介面即可。

ruby中可以這麼幹:

#鴨子類class Duckdef swimprint self.class , " can swim...\n";endend#"會飛的"模組module FlyModuledef flyprint " and I can fly...\n"endend#野鴨(會飛,會遊)class Mallard < Duckinclude FlyModule #匯入模組後,該類即具有模組中定義的方法(可以理解為實現了介面)end#黑鴨(只會遊戲)class Coot < Duckdef Color"Black"endendaCoot = Coot.newaCoot.swim;aMallard = Mallard.newaMallard.swim;aMallard.fly;

運行結果:
Coot can swim...
Mallard can swim...
 and I can fly...

最後module還能玩一些靜態語言認為BT的東東,比如:剛才這款遊戲中,系統隨機從天上掉下一個寶貝,一群黑鴨子中誰撿到後誰就能飛起來!這也難不倒ruby:

aCoot1 = Coot.newaCoot2 = Coot.newaCoot2.extend(FlyModule)aCoot1.swimaCoot2.swimaCoot2.fly#aCoot1.fly #因為aCoot1沒有擴充FlyModule,所以它不能飛,調用將報錯

這裡執行個體aCoot2通過extend關鍵字,擴充了FlyModule模組,所以這個執行個體也就能調用FlyModule中的方法!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.