




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二手車銷售質(zhì)量保證合同書(shū)
- 政府項(xiàng)目招標(biāo)與投標(biāo)操作手冊(cè)
- 分季度財(cái)務(wù)預(yù)算明細(xì)表
- 農(nóng)村農(nóng)業(yè)項(xiàng)目資金使用協(xié)議
- 基礎(chǔ)工作流程簡(jiǎn)明教程與指南
- 員工辦公電腦使用說(shuō)明書(shū)
- 理發(fā)師學(xué)徒專用合同
- 《數(shù)學(xué)函數(shù)圖像理解與問(wèn)題解決》
- 企業(yè)戰(zhàn)略聯(lián)盟合作能力提升效果評(píng)估預(yù)案
- 汽車股份轉(zhuǎn)讓合同
- 甘肅四年級(jí)信息技術(shù)下冊(cè)教學(xué)設(shè)計(jì)(簡(jiǎn)版)(含核心素養(yǎng))
- 作文復(fù)習(xí):破繭成蝶逆天改命-《哪吒2》現(xiàn)象級(jí)成功的高考寫(xiě)作啟示 課件
- 2025中建三局(中原)社會(huì)招聘高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 【生 物】光合作用課件-2024-2025學(xué)年人教版生物七年級(jí)下冊(cè)
- 人教版 七年級(jí)英語(yǔ)下冊(cè) UNIT 2 單元綜合測(cè)試卷(2025年春)
- 2024年湖北省武漢市中考數(shù)學(xué)試題(解析版)
- 2024年“新能源汽車裝調(diào)工”技能及理論知識(shí)考試題與答案
- 【地理】非洲-位置與范圍 高原為主的地形課件-2024-2025學(xué)年湘教版(2024)七下
- 搶救車的管理
- GB/T 17350-2024專用汽車和專用掛車分類、名稱及型號(hào)編制方法
- (正式版)SHT 3551-2024 石油化工儀表工程施工及驗(yàn)收規(guī)范
評(píng)論
0/150
提交評(píng)論