成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

模塊幫助定義Ruby多繼承

開發(fā) 開發(fā)工具
Ruby多繼承的理解對于初學(xué)者來說,是一個(gè)比較難懂的知識(shí)點(diǎn)。首先我們需要了解的是支持Ruby多繼承的mixin模塊類型的含義。

雖然Ruby作為一種新語言,具有一些不同于其他語言的特性,比如沒有函數(shù),只有方法。但是它還是脫不了編程語言特有的性質(zhì)。在這里我們將會(huì)為大家介紹有關(guān)Ruby多繼承的相關(guān)實(shí)現(xiàn)方法。#t#

一些程序語言(如C++和CLOS)提供了多重繼承機(jī)制:一個(gè)類可以繼承自多個(gè)超類。例如,一個(gè)House可能繼承自一個(gè)Building類(連同Office和Hospital類一起)和Residence類(連同Apartment類一起)。盡管多重繼承可能成為一種語言強(qiáng)有力的特征,但是由于它會(huì)增加該語言的復(fù)雜性和歧義,因此許多面向?qū)ο笳Z言都沒有加入它。

Ruby支持單繼承。然而,它還提供了mixin-它提供了Ruby多繼承的許多特征。一個(gè)mixin是一種"模塊"類型。為此,你必須首先理解在Ruby中模塊的含義。

在Ruby中,模塊是一種把方法和常數(shù)分組的方式。它與類相似,但是一個(gè)模塊沒有實(shí)例并且也沒有子類。也許解釋模塊的***方法是舉一個(gè)例子。假定你正在開發(fā)一個(gè)制造業(yè)應(yīng)用程序。該程序需要存取大量的科學(xué)公式和常數(shù),那么你可以或者是創(chuàng)建一個(gè)通用類來把這些放在其中或者是創(chuàng)建一個(gè)模塊。模塊的優(yōu)點(diǎn)在于,在存取其中的公式時(shí),根本沒有任何實(shí)例擾亂所帶來的煩惱。

 

  1. moduleFormulas  
  2. ACCELERATION=9.8  
  3. LIGHTSPEED=299792458 
  4. defenergy(mass)  
  5. mass*(LIGHTSPEED**2)  
  6. end  
  7. defforce(mass)  
  8. mass*ACCELERATION  
  9. end  
  10. end 

現(xiàn)在,這些公式方法和常數(shù)可以被任何數(shù)目的其它類或其自身所使用:

 

  1. irb(main):046:0>
    Formulas.force(10)  
  2. =>98.0  
  3. irb(main):047:0≫
    Formulas::ACCELERATION 
  4. =≫9.8 

注意,為了調(diào)用一個(gè)模塊方法或使用一個(gè)模塊常數(shù),你必須使用類似于調(diào)用一個(gè)類方法的標(biāo)志。為了調(diào)用一個(gè)模塊方法,你需要使用模塊類名,后面跟著一個(gè)點(diǎn),再跟著模塊方法名。為了引用模塊常數(shù),你可以使用模塊名,后面跟著兩個(gè)冒號,再跟著常數(shù)名。

除了作為方法和常數(shù)的"公共"應(yīng)用以外,模塊還可以幫助定義Ruby多繼承。一個(gè)mixin是一個(gè)簡單的"包括"有一個(gè)類定義的模塊。當(dāng)一個(gè)類包括一個(gè)模塊時(shí),所有的模塊中的方法和常數(shù)都成為類的實(shí)例方法和常數(shù)。例如,假定上面定義的Formula模塊作為一個(gè)mixin被添加到Rectangle類。為此,你要使用"include"關(guān)鍵字:

 

  1. classRectangle  
  2. includeFormulas  
  3. end 

現(xiàn)在,Rectangle的實(shí)例具有了它們可以使用的force和energy方法,并且Rectangle類能夠訪問常數(shù)ACCELERATION和LIGHTSPEED:

 

  1. irb(main):044:0>
    classRectangle  
  2. irb(main):045:1>
    includeFormulas  
  3. irb(main):046:1>end 
  4. =>Rectangle  
  5. irb(main):047:0>
    Rectangle.new(4,5).force(10)  
  6. =>98.0  
  7. irb(main):048:0>
    Rectangle::LIGHTSPEED 
  8. =>299792458 

這意味著,mixin給Ruby中的類帶來了許多多重繼承的優(yōu)點(diǎn),卻避開了多重繼承中存在的問題。

Ruby多繼承控制流

象所有的程序語言一樣,Ruby提供了一組控制流命令,這包括條件語句(if/else結(jié)構(gòu)),case語句和循環(huán)語句(do,while和for),還提供了象Ada和Java等語言中的異常處理能力。下面是Ruby中的一些控制流語句的示例:

 

  1. ifarea>100  
  2. "big"  
  3. else  
  4. "small"  
  5. end  
  6. caseheight  
  7. |when1  
  8. |print"stubbyn"  
  9. |when2..10#高度范圍為2~10  
  10. |print"shortn"  
  11. |when10..20#高度范圍為2~10  
  12. |print"talln"  
  13. |end  
  14. aRect=Rectangle.new(4,6)  
  15. whileaRect.area
    <100andaRect.height<10 
  16. aRect.doubleSize()  
  17. end  
  18. forelementin[2,9.8,"
    somestring",Math::PI]
    #遍歷對象集合  
  19. print"Thetypeis:"+
    element.type.to_s+"n&"  
  20. end 

控制語句通常非常直接,但是如前面的case語句和for循環(huán)語句所顯示的,Ruby借鑒了其它一些語言特征和普通的面向?qū)ο蟮奶匦浴?/p>

異常處理類似于Java中的"try...catch...finally"語句。在Ruby中,它們更改為"begin...rescue...ensure"語句:

 

  1. begin  
  2. #實(shí)現(xiàn)一些事情  
  3. rescue  
  4. ##處理錯(cuò)誤  
  5. ensure  
  6. #做一些清理工作,
    如關(guān)閉一個(gè)打開的文件等  
  7. end 

為了在你的Ruby多繼承代碼中引發(fā)一個(gè)異常,你只需要簡單地調(diào)用raise方法:

 

  1. ifarea<0 
  2. raise  
  3. elseifarea>0andarea<10 
  4. raise"Rectangletoosmall"  
  5. elseifarea>100  
  6. raiseTooBigException
    "Rectangletoobig"  
  7. end 

***個(gè)raise調(diào)用創(chuàng)建一個(gè)RuntimeError。第二個(gè)raise創(chuàng)建一個(gè)顯示一條消息的RuntimeError。***一個(gè)raise調(diào)用一個(gè)TooBigException的新實(shí)例(由它創(chuàng)建一個(gè)粗略定義的錯(cuò)誤),并設(shè)置它的適當(dāng)消息。

一個(gè)Ruby多繼承小程序

為了幫助你更好地掌握Ruby的基礎(chǔ)知識(shí),我在本文中提供了一個(gè)小程序供你學(xué)習(xí)之用。為了使這個(gè)程序工作,你可以下載并把該文件解壓到你的文件系統(tǒng)。之后,它將創(chuàng)建一個(gè)examples文件夾,在這個(gè)目錄下共有9個(gè)Ruby代碼文件(.rb文件)。本文中的代碼就包含在這些文件中。另外,你會(huì)找到一個(gè)testShapes.rb文件,它是測試Ruby的Rectangle,Square和Circle對象的主文件。只需簡單地打開一個(gè)命令提示符并運(yùn)行testShapes.rb文件即可。

你將注意到,在testShapes.rb和另外一些代碼中,文件以"require"再加上一個(gè)文件名開頭(象rectangle.rb)。這是在你的Ruby程序中加入或使用來自于其它文件代碼的Ruby標(biāo)志。

責(zé)任編輯:曹凱 來源: ddvip.com
相關(guān)推薦

2009-12-15 13:32:44

Ruby異常處理

2009-12-15 14:51:50

Ruby繼承

2009-12-15 15:55:43

Ruby模塊

2009-07-14 17:36:28

Jython的繼承

2009-12-15 17:48:20

Ruby輸入輸出

2009-12-16 09:43:35

Ruby父類Objec

2009-12-18 13:34:09

Ruby metacl

2013-05-29 10:23:36

Android開發(fā)移動(dòng)開發(fā)Java面試題

2009-12-18 16:04:54

Ruby模塊OpenU

2009-06-16 10:20:05

多繼承C#

2025-06-11 10:00:00

多繼承MixinPython

2009-09-24 15:20:54

C#接口定義

2025-05-23 08:25:00

maven開發(fā)模塊

2022-12-30 08:17:28

Gradle多模塊項(xiàng)目

2020-11-05 10:40:07

Spring Boot多模塊Java

2015-05-25 09:45:16

Java多繼承深入解析

2009-12-18 11:22:34

Ruby source

2012-05-18 10:52:20

TitaniumAndroid模塊自定義View模塊

2009-05-13 11:50:17

C#多繼承接口

2009-12-18 16:43:32

Ruby模塊Win32
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产高清视频 | 成人午夜激情 | av免费网站在线观看 | 一道本在线 | 精品欧美一区二区三区免费观看 | 高清人人天天夜夜曰狠狠狠狠 | 自拍在线 | 精品国产乱码久久久久久丨区2区 | 成人久久久久 | 在线不卡视频 | 久久久久无码国产精品一区 | 青青草网| 欧美激情久久久久久 | 欧美男人的天堂 | 国产三级精品三级在线观看四季网 | 天天操天天插 | 国产精品欧美一区二区三区不卡 | 国产视频福利一区 | 本道综合精品 | 国产精品自产av一区二区三区 | 国产伦一区二区三区久久 | 精品福利av导航 | 一本大道久久a久久精二百 欧洲一区二区三区 | 黄色毛片在线看 | 美女视频三区 | 日韩 欧美 综合 | 国产在线观看 | 日日操夜夜操天天操 | 国产精品一区二区在线 | 欧美精品一二三 | 欧美日在线 | 91av亚洲 | 欧美中文字幕在线观看 | 日韩在线观看视频一区 | 日韩欧美一区二区三区免费看 | 一区在线观看视频 | 亚洲成人精品久久久 | 国产午夜精品久久 | 色婷婷激情 | 一区二区三区在线看 | 久草视频在|