ruby 模塊
更新時(shí)間:2007年11月24日 14:15:49 作者:
Ruby的模塊非常類似類,除了:
模塊不可以有實(shí)體
模塊不可以有子類
模塊由module...end定義.
實(shí)際上...模塊的'模塊類'是'類的類'這個(gè)類的父類.搞懂了嗎?不懂?讓我們繼續(xù)看下去吧.
模塊有兩種用法.其一是將相近的方法和實(shí)體放在一個(gè)相對集中的域里.Ruby標(biāo)準(zhǔn)包里的Math模塊就扮演著這一角色:
ruby> Math.sqrt(2)
1.41421
ruby> Math::PI
3.14159
::操作符告訴 Ruby 解釋器在哪里找常數(shù)的值(可以想像,Math外的其它模塊用PI表示其它的一些東西).如果我們想省掉 :: 直接調(diào)用一個(gè)模塊的方法和常數(shù),我們可以用 include:
ruby> include Math
Object
ruby> sqrt(2)
1.41421
ruby> PI
3.14159
模塊的另一用法是糅和(mixin).某些OO語言,包括C++,允許多重繼承(multiple inheritance),即從多個(gè)的父類里繼承. 現(xiàn)實(shí)世界里一個(gè)多重繼承的例子是鬧鐘:你可以想像鬧鐘屬于鐘類同是屬于帶蜂音器的事物類.
Ruby并未特意實(shí)現(xiàn)真正的多重繼承,但糅和技術(shù)是一很好的替代.記得模塊無法實(shí)體化或子類化;但如果我們在類定義里include一個(gè)方法,
它的方法便實(shí)際上已加入,或"糅合"進(jìn)這個(gè)類.
糅合可以視為一種尋求一切我們希望得到的特定屬性的方法.舉個(gè)例子,如果一個(gè)類有個(gè) each 方法,把標(biāo)準(zhǔn)庫里的Enumerable模塊糅合進(jìn)來就自然地賦予我們 sort 和 find 兩個(gè)方法.
模塊的使用令到我們獲得多重繼承的基本功能卻可通過簡單的樹結(jié)構(gòu)表述類關(guān)系,同時(shí)也可觀地簡化了語言的實(shí)現(xiàn)(Java的設(shè)計(jì)者也做了一個(gè)類似的選擇).
模塊不可以有實(shí)體
模塊不可以有子類
模塊由module...end定義.
實(shí)際上...模塊的'模塊類'是'類的類'這個(gè)類的父類.搞懂了嗎?不懂?讓我們繼續(xù)看下去吧.
模塊有兩種用法.其一是將相近的方法和實(shí)體放在一個(gè)相對集中的域里.Ruby標(biāo)準(zhǔn)包里的Math模塊就扮演著這一角色:
ruby> Math.sqrt(2)
1.41421
ruby> Math::PI
3.14159
::操作符告訴 Ruby 解釋器在哪里找常數(shù)的值(可以想像,Math外的其它模塊用PI表示其它的一些東西).如果我們想省掉 :: 直接調(diào)用一個(gè)模塊的方法和常數(shù),我們可以用 include:
ruby> include Math
Object
ruby> sqrt(2)
1.41421
ruby> PI
3.14159
模塊的另一用法是糅和(mixin).某些OO語言,包括C++,允許多重繼承(multiple inheritance),即從多個(gè)的父類里繼承. 現(xiàn)實(shí)世界里一個(gè)多重繼承的例子是鬧鐘:你可以想像鬧鐘屬于鐘類同是屬于帶蜂音器的事物類.
Ruby并未特意實(shí)現(xiàn)真正的多重繼承,但糅和技術(shù)是一很好的替代.記得模塊無法實(shí)體化或子類化;但如果我們在類定義里include一個(gè)方法,
它的方法便實(shí)際上已加入,或"糅合"進(jìn)這個(gè)類.
糅合可以視為一種尋求一切我們希望得到的特定屬性的方法.舉個(gè)例子,如果一個(gè)類有個(gè) each 方法,把標(biāo)準(zhǔn)庫里的Enumerable模塊糅合進(jìn)來就自然地賦予我們 sort 和 find 兩個(gè)方法.
模塊的使用令到我們獲得多重繼承的基本功能卻可通過簡單的樹結(jié)構(gòu)表述類關(guān)系,同時(shí)也可觀地簡化了語言的實(shí)現(xiàn)(Java的設(shè)計(jì)者也做了一個(gè)類似的選擇).
相關(guān)文章
對優(yōu)化Ruby on Rails性能的一些辦法的探究
這篇文章主要介紹了對優(yōu)化Ruby on Rails性能的一些辦法的一些探究,包括避免內(nèi)存密集型的應(yīng)用和GC等相關(guān)問題的探討,需要的朋友可以參考下2015-11-11ruby線程實(shí)現(xiàn)生產(chǎn)者消費(fèi)者問題示例(隊(duì)列Queue實(shí)現(xiàn)線程同步)
這篇文章主要介紹了ruby線程實(shí)現(xiàn)生產(chǎn)者消費(fèi)者問題示例(隊(duì)列Queue實(shí)現(xiàn)線程同步),需要的朋友可以參考下2014-05-05借助RubyGnome2庫進(jìn)行GTK下的Ruby GUI編程的基本方法
這篇文章主要介紹了借助RubyGnome2庫進(jìn)行GTK下的Ruby GUI編程的基本方法,介紹了基本的UI和事件響應(yīng)的相關(guān)實(shí)現(xiàn),需要的朋友可以參考下2015-12-12Ruby on rails安裝后去掉DL is deprecated,please use Fiddle警告信息的方法【
這篇文章主要介紹了Ruby on rails安裝后去掉DL is deprecated,please use Fiddle警告信息的方法,通過針對Ruby on rails安裝文件中的警告部分源碼進(jìn)行注釋來達(dá)到消除警告的目的,需要的朋友可以參考下2017-02-02Ruby中使用Block、Proc、lambda實(shí)現(xiàn)閉包
這篇文章主要介紹了Ruby中使用Block、Proc、lambda實(shí)現(xiàn)閉包,在編程領(lǐng)域我們可以通俗的說:子函數(shù)可以使用父函數(shù)中的局部變量,這種行為就叫做閉包,需要的朋友可以參考下2014-06-06