ruby的模組

來源:互聯網
上載者:User

Ruby的模組非常類似類,除了:

模組不可以有實體

模組不可以有子類

模組由module...end定義.

實際上...模組的'模組類'是'類的類'這個類的父類.搞懂了嗎?不懂?讓我們繼續看下去吧.

模組有兩種用法.其一是將相近的方法和實體放在一個相對集中的域裡.Ruby標準包裡的Math模組就扮演著這一角色:

ruby> Math.sqrt(2)1.41421ruby> Math::PI3.14159

::操作符告訴 Ruby 解譯器在哪裡找常數的值(可以想像,Math外的其它模組用PI表示其它的一些東西).如果我們想省掉 :: 直接調用一個模組的方法和常數,我們可以用 include:

ruby> include MathObjectruby> sqrt(2)1.41421ruby> PI3.14159

模組的另一用法是糅和(mixin).某些OO語言,包括C++,允許多重繼承(multiple inheritance),即從多個的父類裡繼承. 現實世界裡一個多重繼承的例子是鬧鐘:你可以想像鬧鐘屬於鐘類同是屬於帶蜂音器的事物類.

Ruby並未特意實現真正的多重繼承,但糅和技術是一很好的替代.記得模組無法實體化或子類化;但如果我們在類定義裡include一個方法,

它的方法便實際上已加入,或"糅合"進這個類.

糅合可以視為一種尋求一切我們希望得到的特定屬性的方法.舉個例子,如果一個類有個 each 方法,把標準庫裡的Enumerable模組糅合進來就自然地賦予我們 sort 和 find 兩個方法.

模組的使用令到我們獲得多重繼承的準系統卻可通過簡單的樹結構表述類別關係,同時也可觀地簡化了語言的實現(Java的設計者也做了一個類似的選擇).

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.