<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    閑云無衣
    無衣的筆記
    Ruby的模塊和類有相似之處:他們都包含一組方法、常量、以及其他類和模塊的定義。但不同的是不能創建模塊的實例。

    Ruby的模塊非常類似類,除了:
    • 模塊不可以有實體?

    • 模塊不可以有子類?

    • 模塊由module...end定義.
    實際上...模塊的'模塊類'是'類的類'這個類的父類。

    模塊用途有二。一是扮演著命名空間的角色,使得方法的名字不會彼此沖突;二是可以在不同的類之間共享同樣的功能。如果一個類混入(mix in)了一個模塊,這個類就將擁有模塊中定義的所有的實例方法,就像在類中定義了這些實例方法一樣。不同的類可以混入同樣的模塊,因此可以共享同樣的功能而無須使用繼承。此外也可以在一個類中混入多個模塊。

    在Rails中用模塊來實現輔助方法,并自動地將輔助模塊混入到適當的視圖中。

    模塊的定義格式:

    module 模塊名
    ??? def 方法名
    ??? ??? ...
    ??? end
    ??? ...
    end

    模塊有兩種用法.其一是將相近的方法和實體放在一個相對集中的域里.Ruby標準包里的Math模塊就扮演著這一角色:
    ruby>?Math.sqrt(2)
    ???1.41421
    ruby>?Math::PI
    ???3.14159

    ::操作符告訴?Ruby?解釋器在哪里找常數的值(可以想像,Math外的其它模塊用PI表示其它的一些東西).如果我們想省掉?::?直接調用一個模塊的方法和常數,我們可以用?include:
    ruby>?include?Math
    ???Object
    ruby>?sqrt(2)
    ???1.41421
    ruby>?PI
    ???3.14159

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

    Ruby并未特意實現真正的多重繼承,但混入技術是一很好的替代.記得模塊無法實體化或子類化;但如果我們在類定義里include一個方法,
    它的方法便實際上已加入,或"混入"進這個類.

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

    模塊的使用令到我們獲得多重繼承的基本功能卻可通過簡單的樹結構表述類關系,同時也可觀地簡化了語言的實現(Java的設計者也做了一個類似的選擇).
    posted on 2007-02-08 12:33 無衣 閱讀(589) 評論(0)  編輯  收藏 所屬分類: rails
     
    主站蜘蛛池模板: 国产又长又粗又爽免费视频| 日本牲交大片免费观看| 亚洲乱码一区二区三区在线观看| 亚洲AV无码专区亚洲AV桃| 啦啦啦高清视频在线观看免费| 亚洲图片中文字幕| 国产成人精品免费午夜app| 亚洲第一区视频在线观看| 3344永久在线观看视频免费首页 | 又黄又爽又成人免费视频| 99久久精品国产亚洲| 国产精品久久久久久久久免费| 亚洲精品国产成人中文| 国产成人无码免费看视频软件| 亚洲色无码国产精品网站可下载| 麻豆成人精品国产免费| 色婷婷综合缴情综免费观看| 国产AV无码专区亚洲AWWW| 美女在线视频观看影院免费天天看| 久久亚洲精品AB无码播放| 波多野结衣免费在线| 亚洲日韩av无码中文| 亚洲国产精品成人一区| 免费萌白酱国产一区二区三区| 91大神亚洲影视在线| 色www永久免费视频| 精品无码国产污污污免费网站国产| 亚洲AV无码欧洲AV无码网站| 国产成人免费高清激情明星| 黄色免费在线观看网址| 亚洲AV综合色区无码一区爱AV| 国产一卡2卡3卡4卡2021免费观看 国产一卡2卡3卡4卡无卡免费视频 | 波多野结衣一区二区免费视频| 黄色视屏在线免费播放| 亚洲码在线中文在线观看| 国产精品免费视频一区| 国产免费爽爽视频在线观看| 亚洲五月丁香综合视频| 久久影视综合亚洲| AV免费网址在线观看| 99久久免费国产特黄|