二十分鐘_教你Ruby快速入門(DOC)_第1頁(yè)
二十分鐘_教你Ruby快速入門(DOC)_第2頁(yè)
二十分鐘_教你Ruby快速入門(DOC)_第3頁(yè)
二十分鐘_教你Ruby快速入門(DOC)_第4頁(yè)
二十分鐘_教你Ruby快速入門(DOC)_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、分鐘教你Ruby快速入門介紹 這是一個(gè)短小的Ruby入門,完全讀完只需20分鐘。這里假設(shè)讀者已經(jīng)安裝了 Ruby,如果你沒(méi)有安裝的話,請(qǐng)?jiān)陂喿x文前訪問(wèn)Ruby官方網(wǎng)站進(jìn)行下載并安裝。交互式的Ruby 打開(kāi)IRB (交互式Ruby外殼):如果你使用Mac OS X,那么請(qǐng)打開(kāi)終端窗口輸入irb ;如果你使用Linux,那么請(qǐng)打開(kāi)shell輸入irb;如果你使用windows,那么請(qǐng)?jiān)陂_(kāi)始菜單中找到 Ruby->fxri,并執(zhí)行它。1 廠 b(mairi?:001:0>Ok,在打開(kāi)IRB之后,在其中輸入"Hello World"。r1rb(main):001:0&g

2、t;=>"曲.心2JRuby聽(tīng)從你的安排!發(fā)生了什么?我們剛才編寫(xiě)了世界上最短小的“ Hello World ”程序嗎?這么說(shuō)不太確切。第二行輸出是IRB告訴我們:上一個(gè)表達(dá)式的評(píng)估結(jié)果。如果我們希 望打印出“ Hello World ”,那么就還需要一點(diǎn)努力:ri rbCmain):002:0> puts "Hel I - Hello kfor'ld"mlJputs在Ruby中是一個(gè)簡(jiǎn)單的打印輸出命令。后面的“ => nil”表示什么? 是表達(dá)式的結(jié)果。Puts總是返回nil,這是Ruby中表示“絕對(duì)無(wú)值”(absolutely-pos

3、itively-nothing value)的方式,看上去有些類似 Java中的 null。你的免費(fèi)計(jì)算器在這里!無(wú)需做什么,我們就能把IRB作為一個(gè)簡(jiǎn)單的計(jì)算器使用:i rbCmain):003:0> 3+25使用鍵盤上的向上然后使用空格鍵進(jìn)行這樣就能計(jì)算3+2。夠簡(jiǎn)單的!那么3乘以2如何?你可以在下面繼續(xù)輸入 3*2, 也可以回到上面(3+2處)重新修改你剛剛輸入的計(jì)算公式。鍵,使光標(biāo)到達(dá)3+2那一行,再用左鍵移動(dòng)光標(biāo)到加號(hào)上, 修改。r1rbCmain):004:0>=: 6F面,讓我們嘗試計(jì)算3的平方:ri rb-,rTiain J: 005 :0>=> 9在R

4、uby語(yǔ)言中,*表示冪運(yùn)算。那么如何計(jì)算平方根呢?ri rbf.main): 006:0> Hath . sqrtC9)=> 3.0Ok,等一下,表達(dá)式中的sqrt(9)表示什么?你一定能猜到這是計(jì)算 9的平方根。 而Math表示什么?不要著急,下面就讓我們進(jìn)一步了解像Math這樣的模塊。模塊一一按照主題分組的代碼Math是Ruby內(nèi)建的數(shù)學(xué)模塊。在Ruby中,模塊提供了兩種角色:一種角色是 將類似的方法聚集在同一個(gè)“家族”名下。因此,Math也包括sin、tan這樣的方法。第二種角色是一個(gè)圓點(diǎn)(dot),它標(biāo)記了消息的接收者。什么是消息? 在上面的例子中,sqrt(9)便是消息,

5、它意味著調(diào)用sqrt方法取出9的平方根。Sqrt方法調(diào)用的結(jié)果是3.0。你可能注意到它并不是3。這是因?yàn)槎鄶?shù)情況下, 數(shù)字的平方根并不是整數(shù),所以這里返回了一個(gè)浮點(diǎn)數(shù)。ri rbCmain;:007:0>a =3 " 2=> 91rbCmain;:008:0>b =4卄2=> 161rb Cmain):009:0>=> 5.0Math.sqrtCa+b)J那么我們?nèi)绾斡涀∵@些計(jì)算結(jié)果呢?將結(jié)果賦值給變量。如何定義方法?如何才能方便省事地隨意輸出字符串,而無(wú)需過(guò)多地勞煩我們的手指呢? 們需要定義一個(gè)方法!ri 叱main):010:0> def

6、 hi rbCniain): Oil:1> puts 'li亡 r 1 譏)廠d :11i rbCmain):012;=> rd 1:1> end“ def h”標(biāo)志著方法定義的開(kāi)始。它告訴 Ruby我們正在定puts "Hello World"。最后,也就是第=> nil”告訴我們它上面的代碼中第一行義一個(gè)名為h的方法。下面一行是方法體:三行“end”通知Ruby我們完成了方法定義。Ruby的回應(yīng)“ 已經(jīng)知道我們定義了此方法。簡(jiǎn)短、重復(fù)地調(diào)用方法 現(xiàn)在,讓我們嘗試多次執(zhí)行這個(gè)方法:r1rbCmain):013:CHello World 丨)

7、> h=>".I 11rbCmain):014:C)> hCjHello Wor1 d!=> ni 1哈,這太容易了。在Ruby中調(diào)用某個(gè)方法只需將方法名提交給 Ruby。當(dāng)然,這 是在方法沒(méi)有參數(shù)的情況下。如果你愿意也可以添加一個(gè)空白的括號(hào), 但是這沒(méi) 有必要。如果我們想對(duì)某個(gè)人說(shuō) 重定義h方法使它接收hello而不是整個(gè)“世界” (world),那該怎么做? n ame參數(shù)。ri rbCmain):015:0>1bmain):016:1>1 rbCmai n;:017:l;>= nil1rbCmain):018:0>Hello Ma

8、tz!=> nildef hname) puts end嗯,現(xiàn)在看來(lái)工作正常。字符串中的奧秘“ #n ame ”是什么意思?這是大括號(hào)之間放入的字符串(這里是指 name)將被外部的字符串代替。你也可以 使用字符串類內(nèi)建的capitalize方法來(lái)確保某人名字的首字母大寫(xiě):Ruby在某個(gè)字符串中插入其它字符的方式。在rT rbCmain;:019:0>i rbCmain):020:1>i rbCmain;:021:1>=: nil1 rb Cmai n ) : 022 : 0> Hello Chri s!=> ni 1i rbCniain): 02 3 :

9、0>Hello Werl d!=> ni 1def h Cname = "vJc r i J")puts "he"I- #name.capita1ize!" endh "ch ri s.上面的代碼有兩個(gè)地方需要說(shuō)明:第一,我們通過(guò)無(wú)括號(hào)的方式調(diào)用方法,因?yàn)槔ㄌ?hào)是可選的;第二,這里的默認(rèn)參數(shù)值為“World ”。也就是說(shuō)在調(diào)用方法時(shí)如果沒(méi)有提供 name 參數(shù),則使用默認(rèn)值“ World ”。進(jìn)化為Greeter!我們是否需要一個(gè)真正的問(wèn)候者(greeter) 尊重地向你示好?那么這就最好建立一個(gè)“,他能記住你的名字、問(wèn)候你

10、、總是Greete” 類:in;.in): in): in;i: in): hn:i: in): 廿):in): in;:O33 in):034J : 024025026027028029030031032Cb1>2>1>2>2>1>2>2>1>cl ass Greeterdef 1ni ti i ze cname(Snarrie = nameenddefputs "'*1 #釦泗 1enddef £ay_byeputs '''#(3name,廣門口endend在上面的類代碼中定義了一個(gè)稱

11、為 Greeter的類和一些類方法,其中出現(xiàn)了一些 新的“關(guān)鍵詞”:請(qǐng)注意“name,它是類的實(shí)例變量,并對(duì)類中的所有方法(say_hi和say_bye方法)都有效。如何讓Greeter類發(fā)揮作用?現(xiàn)在讓我們來(lái)建立一個(gè)Greeter對(duì)象并使用它!rT rbCmai nj: 035: 0> g = Greeter. new("P.?i L' 二:、:匸已 1“ : 15一印一 諒廠:JEU-i rbCmai nj:036:0;> g.say_hiHi Pat!=> ni 1irfcimain:037:0> g.say_byeBye Pat, come b

12、ack soon.=> nilGreeter類的實(shí)例對(duì)象g被建立后,它便接受了 name參數(shù)(值為Pat)。那么我們能直接訪問(wèn)name嗎?ri rbfmain):03B:0> g.OnameSntaxError:匚ompi1e error Ci rbj:52: syntax error from Ci rb):52看看上面的編譯錯(cuò)誤來(lái)看,這樣直接訪問(wèn) name是行不通的。窺視對(duì)象的內(nèi)部 對(duì)象中的實(shí)例變量總是隱藏于其中, 但也并非毫無(wú)蹤跡可尋,通過(guò)審查(inspect)對(duì)象便會(huì)見(jiàn)到它們。當(dāng)然還有其它的訪問(wèn)方法,但是Ruby采用了良好的面向?qū)ο蟮姆绞絹?lái)保持?jǐn)?shù)據(jù)的隱藏性。 喔!這么多方法

13、,可是我們只定義了兩個(gè)方法呀?其它的方法又出自何處?不要 擔(dān)心,instance_methods方法列出了 Greeter對(duì)象的所有方法,其中包括父類中定 義的方法。如果我們只想對(duì)Greeter類的方法進(jìn)行列表的話,那么把false作為參 數(shù)調(diào)用instance_methods方法即可。false意味著我們不需要父類定義的方法。r1rbCmainD:039:0> Greeter,instancemethods=> 'nethod", *'send", "?i ncl etc.'-"_snd.一","

14、'equal?'',"匚話仃于,"f re zen"'","i fLsrdnce_var-i ab1, : i rid_of"' "to_i"i r)srance_-a " , "type" , 廠門匸宀_1_二7_皿已十上1口已三 *',I*- >-l 11卜-I'u-1''"untannr'-, "sayJ',I", "cb?np" , &

15、#39;pLibl i c_:n-thuds 七曲代S 一沁一“ ns ran "炮 r i ab1 srr 1、h 1; -,it打IPS戶廣 'FlEthuT1 risr.Tinceni"ti-r-. I tr1rbCmainj:040:0> Greeter.instance_methodsfalse) ir "哈哈,這才是我們想要的。下面讓我們看看Greeter對(duì)象能回應(yīng)哪些方法:r1rb Cmai n):041:0>=; ta'I se1rbCmai nj:042:0-> tjgirbCmai :04 3:0>=&g

16、t; trueg.re£pond_to?("n;g.respond_to?jg. respond_to? <"L:它知道say_hi、to_s (此方法將對(duì)象轉(zhuǎn)換為字符串,是任何對(duì)象都必備的默認(rèn)方法,很想Java中的toString方法),但它不知道 nameo隨時(shí)修改類定義 如何才能查看或者修改name呢? Ruby提供了訪問(wèn)對(duì)象變量的簡(jiǎn)單方法:main) :()44 : 0> class Greeter main):045:1>rirb(attr_accessorirb(i rbCmain):046:1? end“ '11在Ruby語(yǔ)

17、言中,你能夠多次打開(kāi)某個(gè)類并修改它。而修改所帶來(lái)的變化將應(yīng)用 在此后建立的任何新對(duì)象中、甚至現(xiàn)存的此類對(duì)象中。下面讓我們建立一個(gè)新對(duì) 象并訪問(wèn)它的name屬性。r1 rb'mai n : 047: 0> g 夢(mèng)<口已亡 te: u.、Ji rb Cmai n): 04 8 : 0>二> truei rbCmain;:04 9:0>=? true1rbCmain):050:0> Mi Andy!二> n i 11 rb Cmai n j: 051:0>=Greeter new;Un irr '.r-" Andy "

18、;.g.respond_to?(";:g.respon d_to?"廠門任門二一 _ - i rbCmai n ; : 052 : 0>=> F亡廠:口J1rbCmi n):053:0> 二> “L 二"Tyi rb Cmai n ;: 054: 0>Hinilg. nameg.£ay_hi我們通過(guò)使用attr accessor定義了兩個(gè)方法:“.name 用來(lái)獲取 name屬性值;“.name=用來(lái)設(shè)置namee屬性值。這很類似在Java類中訪問(wèn)被Public修飾的成員變量。向每個(gè)人問(wèn)候,MegaGreeter不會(huì)漏掉一個(gè)

19、人Greeter并不完美,因?yàn)樗荒芤淮畏?wù)一個(gè)人。所以我們?cè)谶@里設(shè)計(jì)一個(gè)能夠 一次向全世界、世界上每個(gè)人或者在名單中的人發(fā)送問(wèn)候的MegaGreeter類。在這里,我們將放棄從前的IRB交互模式,轉(zhuǎn)而改為編寫(xiě)Ruby程序文件。退出IRB的方法:輸入“ quit”、“ exit”或者按下Control+D的組合鍵。end肝F A斂Jlli f IF .ni 17c' :i-F Ar;espondtoO; "!": td-ih .J. indpe puci燦-Lputs*nda m 上yFi f 曲bill、; .n117putsc-si-F. rspodto (&#

20、39;Putsend c-ndAf.rxMcs - 呵呂靱_hh Tfl.s-ary-tv*刪.3"Sii_hT *9 :=些上盧保存上面的代碼到名為“ ri20min.rb”的文件中,并使用“ ruby ri20min.rb ”的命令執(zhí)行它。程序輸出如下:HeT10 World!Goodbye World.Hel10 Zeke !Come back soon!Goodbye Zeke.Hel 10Come back soon IHel 10He11 0Hel 1 0Al bert!Brenda!Chari es !Dave !He11 0Englebert!Goodbye Albe

21、rt, Brenda, Chari es , Dave, Englebert. back soon!F面我們將深入了解一下上面的代碼。請(qǐng)注意上面代碼中的起始行,它以#開(kāi)頭。在Ruby語(yǔ)言中,任何以#開(kāi)頭的行都 被視為注釋,并被解釋程序忽略。我們的say_hi方法已經(jīng)發(fā)生了變化:r卑1?:' H A ryt'C'dydef ssy_hii f ©names,ni 1 ?puts "el si f ©names.respond_tQ?'工呂匸h")# jnd 1 is c:- sone kind, n te i'a t

22、e !. ech do | name Iputs "Ne'" 1 門endelseputs ' -J : #<(names'"已ndend它查找n ames參數(shù)并按照其參數(shù)值作出決定:如果參數(shù)值為nil,它將打印三個(gè)圓點(diǎn)。那么 n ames.res pon d_to?("each表示什么?循環(huán)一一也叫迭代 如果names對(duì)象具有each方法,那么它是可以被迭代的,進(jìn)而可以對(duì)其進(jìn)行迭 代,從而問(wèn)候列表中每個(gè)人。如果names不具備each方法,則將它自動(dòng)轉(zhuǎn)換為 字符串,并執(zhí)行默認(rèn)的問(wèn)候。©names.each 日心

23、I name I puts 1 ? #name I endeach是一種方法,它接受一個(gè)代碼塊(block of code),然后針對(duì)列表中的每個(gè) 成員執(zhí)行這個(gè)代碼塊,而在do和end之間的部分便是這個(gè)非常類似匿名函數(shù)的代碼塊。在管道符之間的變量是代碼塊的參數(shù)name,它作為代碼塊參數(shù)被綁定為列表成員,而代碼塊puts "Hello #name!"將使用這個(gè)參數(shù)進(jìn)行輸出。大多數(shù)其它的編程語(yǔ)言使用循環(huán)遍歷列表,下面是 C語(yǔ)言的循環(huán)示例:rfor C1=0: 1<number_of_e1ements; i +)do-somethi ng_wT th (el ement i

24、 ); 上面的代碼顯然可以工作,但它不夠“優(yōu)雅”!你不得不用 量,還需要指出列表的長(zhǎng)度,然后再解釋如何遍歷列表。i這個(gè)多余的循環(huán)變Ruby的迭代方式則更加優(yōu)雅,所有的內(nèi)部管理細(xì)節(jié)都隱藏在 需做的就是告訴它如何處理其中的每個(gè)成員。each方法中,你所塊(block),Ruby邊緣的高亮點(diǎn)!塊(block)的真正優(yōu)勢(shì)在于:能夠處理比列表更加復(fù)雜的對(duì)象。處理簡(jiǎn)單的內(nèi)部管理細(xì)節(jié)外,你還能處理setup teardown和所有錯(cuò)誤,而不讓用戶有所察覺(jué)。除了在方法中可以rH Ly Ldef say_byei f ©names.ni 1 ?puts©name呂.廠espond_to?0M 1 rn n thE 1 n st Merits i ,,1£tupP-:"onwstMd n e-1-say_bye方法沒(méi)有使用each,而是檢查names是否具有join方法,如果具有join 方法,則調(diào)用join方法。否則它將直接打印names變量。此方法并不關(guān)心變量的實(shí)際類型,這依賴于它所支持的那些被稱為“DuckTyping”的方

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論