




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Ru基礎(chǔ)知識(shí)作業(yè)指導(dǎo)書TOC\o"1-2"\h\u9990第一章Ru概述 3320711.1Ru語(yǔ)言簡(jiǎn)介 3162641.2Ru安裝與配置 322122第二章Ru語(yǔ)法基礎(chǔ) 4129952.1變量與數(shù)據(jù)類型 4196902.1.1變量的定義與使用 4313072.1.2數(shù)據(jù)類型 487932.2控制結(jié)構(gòu) 5283032.2.1條件語(yǔ)句 5322572.2.2循環(huán)語(yǔ)句 5286362.3運(yùn)算符 611232.3.1算術(shù)運(yùn)算符 6267452.3.2比較運(yùn)算符 6305692.3.3邏輯運(yùn)算符 730836第三章Ru數(shù)組與哈希 734373.1數(shù)組的基本操作 7248673.1.1創(chuàng)建數(shù)組 7238833.1.2訪問(wèn)數(shù)組元素 7136713.1.3修改數(shù)組元素 7286823.1.4添加和刪除元素 7156553.2哈希的基本操作 8196963.2.1創(chuàng)建哈希 8116903.2.2訪問(wèn)哈希元素 8150873.2.3修改哈希元素 896523.2.4添加和刪除鍵值對(duì) 827743.3數(shù)組與哈希的綜合應(yīng)用 950103.3.1使用數(shù)組存儲(chǔ)多個(gè)哈希 960563.3.2使用哈希存儲(chǔ)數(shù)組信息 97288第四章Ru方法與模塊 9222754.1方法定義與調(diào)用 961104.2模塊的定義與使用 10249694.3方法的高級(jí)特性 111731第五章Ru面向?qū)ο缶幊?12234495.1類的定義與使用 12281525.2繼承與多態(tài) 13104705.3封裝與解耦 1429673第六章Ru異常處理 15270516.1異常的基本概念 15259766.2異常的捕獲與處理 16303436.3異常的拋出與自定義異常 178936第七章Ru文件操作 17307997.1文件讀寫基礎(chǔ) 18155947.1.1文件打開(kāi)與關(guān)閉 18254307.1.2讀取文件內(nèi)容 1828907.1.3寫入文件內(nèi)容 1966447.2目錄操作 1945617.2.1創(chuàng)建目錄 19226197.2.2刪除目錄 19279817.2.3列出目錄內(nèi)容 19235427.2.4改變當(dāng)前工作目錄 1945887.3文件與目錄的高級(jí)操作 1927947.3.1文件復(fù)制與移動(dòng) 20115867.3.2獲取文件屬性 20175207.3.3文件名與路徑操作 2020919第八章Ru網(wǎng)絡(luò)編程 2023318.1套接字編程基礎(chǔ) 20323078.1.1套接字的概述 20251708.1.2Socket類的使用 20277018.1.3TCP客戶端與服務(wù)器示例 21272598.2HTTP請(qǐng)求與響應(yīng) 2181368.2.1HTTP協(xié)議概述 2191398.2.2使用HTTP類發(fā)送請(qǐng)求 22204618.2.3使用HTTP類處理響應(yīng) 22309778.3網(wǎng)絡(luò)編程綜合應(yīng)用 22131638.3.1網(wǎng)絡(luò)爬蟲 22262168.3.2網(wǎng)絡(luò)聊天室 2323858第九章Ru多線程編程 24261809.1線程的創(chuàng)建與管理 24278199.1.1線程的創(chuàng)建 24304219.1.2線程的管理 24147609.2線程同步與通信 25248109.2.1互斥鎖(Mutex) 2584149.2.2條件變量(Condition) 25289319.2.3信號(hào)量(Semaphore) 26320049.3線程安全與并發(fā) 2677809.3.1線程安全 26312439.3.2并發(fā) 2614323第十章Ru實(shí)踐項(xiàng)目 26693110.1簡(jiǎn)單計(jì)算器程序 261148110.1.1項(xiàng)目概述 262074310.1.2設(shè)計(jì)思路 273051410.1.3實(shí)現(xiàn)代碼 271203010.2數(shù)據(jù)庫(kù)操作示例 28854310.2.1項(xiàng)目概述 282940510.2.2設(shè)計(jì)思路 282526210.2.3實(shí)現(xiàn)代碼 28302010.3Web應(yīng)用程序開(kāi)發(fā)示例 293032110.3.1項(xiàng)目概述 292187510.3.2設(shè)計(jì)思路 291044010.3.3實(shí)現(xiàn)代碼 29第一章Ru概述1.1Ru語(yǔ)言簡(jiǎn)介Ru是一種開(kāi)源的、面向?qū)ο蟮哪_本語(yǔ)言,由日本程序員松本行弘(YukihiroMatsumoto,簡(jiǎn)稱Matz)于1993年設(shè)計(jì),并于1995年首次發(fā)布。Ru旨在提供一種易于閱讀、編寫和理解的語(yǔ)言,同時(shí)具備強(qiáng)大的面向?qū)ο蠊δ?。Ru的語(yǔ)法簡(jiǎn)潔明了,支持多種編程范式,包括面向?qū)ο?、函?shù)式、命令式等。Ru在國(guó)際上擁有廣泛的用戶群體,特別是在Web開(kāi)發(fā)領(lǐng)域,RuonRails(簡(jiǎn)稱Rails)框架的推出,使得Ru語(yǔ)言的知名度迅速提升。在我國(guó),Ru也逐漸受到越來(lái)越多的關(guān)注和應(yīng)用。1.2Ru安裝與配置Ru的安裝與配置過(guò)程相對(duì)簡(jiǎn)單,以下是在Windows和Linux系統(tǒng)中安裝Ru的方法:(1)Windows系統(tǒng):(1)RuInstaller:訪問(wèn)RuInstaller官方網(wǎng)站(s:///),最新版本的RuInstaller。(2)安裝Ru:雙擊的RuInstaller安裝包,按照提示完成安裝。安裝過(guò)程中,建議勾選“AddRutoPATH”選項(xiàng),以便在命令行中直接使用Ru命令。(3)驗(yàn)證安裝:打開(kāi)命令行窗口,輸入以下命令,查看Ru版本:ruv若返回Ru版本信息,則表示安裝成功。(2)Linux系統(tǒng):(1)更新系統(tǒng):在終端輸入以下命令,保證系統(tǒng)軟件包更新到最新版本:sudoaptgetupdate(2)安裝Ru:輸入以下命令,安裝Ru:sudoaptgetinstallru(3)驗(yàn)證安裝:打開(kāi)終端,輸入以下命令,查看Ru版本:ruv若返回Ru版本信息,則表示安裝成功。在安裝Ru后,可以根據(jù)需要安裝Ru的擴(kuò)展庫(kù)。Ru的擴(kuò)展庫(kù)稱為Gem,可以通過(guò)RuGems工具進(jìn)行安裝。以下為安裝RuGems的方法:(1)Windows系統(tǒng):在RuInstaller安裝目錄下,找到并運(yùn)行`ridkinstall`命令。(2)Linux系統(tǒng):輸入以下命令,安裝RuGems:sudoaptgetinstallrugems安裝完成后,可以通過(guò)以下命令安裝Ru擴(kuò)展庫(kù):geminstall[gem_name]其中,[gem_name]為要安裝的擴(kuò)展庫(kù)名稱。第二章Ru語(yǔ)法基礎(chǔ)2.1變量與數(shù)據(jù)類型2.1.1變量的定義與使用在Ru中,變量是用來(lái)存儲(chǔ)數(shù)據(jù)的標(biāo)識(shí)符。變量的命名規(guī)則遵循以下原則:以小寫字母或下劃線開(kāi)頭,后續(xù)字符可以是字母、數(shù)字或下劃線。以下是幾種常見(jiàn)的變量類型:局部變量:作用域限于當(dāng)前方法或代碼塊內(nèi)。實(shí)例變量:作用域限于當(dāng)前對(duì)象的實(shí)例內(nèi),以符號(hào)開(kāi)頭。類變量:作用域限于當(dāng)前類的所有實(shí)例內(nèi),以符號(hào)開(kāi)頭。全局變量:作用域貫穿整個(gè)程序,以$符號(hào)開(kāi)頭。2.1.2數(shù)據(jù)類型Ru中的數(shù)據(jù)類型主要包括以下幾種:數(shù)字(Numeric):包括整數(shù)(Integer)和浮點(diǎn)數(shù)(Float)。字符串(String):由字符序列組成的不可變序列。布爾值(Boolean):包括true和false兩種值。數(shù)組(Array):一系列元素的集合,元素類型可以不同。哈希(Hash):鍵值對(duì)的集合,鍵和值可以是任意類型。2.2控制結(jié)構(gòu)2.2.1條件語(yǔ)句Ru中的條件語(yǔ)句包括if、unless、case等。以下是幾種常用的條件語(yǔ)句:if語(yǔ)句:根據(jù)條件表達(dá)式判斷是否執(zhí)行代碼塊。ruifcondition條件為真時(shí)執(zhí)行的代碼塊endunless語(yǔ)句:與if語(yǔ)句相反,當(dāng)條件為假時(shí)執(zhí)行代碼塊。ruunlesscondition條件為假時(shí)執(zhí)行的代碼塊endcase語(yǔ)句:根據(jù)條件匹配執(zhí)行相應(yīng)的代碼塊。rucasevariablewhenvalue1當(dāng)variable等于value1時(shí)執(zhí)行的代碼塊whenvalue2當(dāng)variable等于value2時(shí)執(zhí)行的代碼塊else當(dāng)以上條件都不滿足時(shí)執(zhí)行的代碼塊end2.2.2循環(huán)語(yǔ)句Ru中的循環(huán)語(yǔ)句包括for、while、until等。以下是幾種常用的循環(huán)語(yǔ)句:for循環(huán):遍歷數(shù)組或范圍內(nèi)的元素。ruforelementinarray對(duì)每個(gè)元素執(zhí)行的代碼塊endwhile循環(huán):當(dāng)條件為真時(shí),重復(fù)執(zhí)行代碼塊。ruwhilecondition條件為真時(shí)執(zhí)行的代碼塊enduntil循環(huán):當(dāng)條件為假時(shí),重復(fù)執(zhí)行代碼塊。ruuntilcondition條件為假時(shí)執(zhí)行的代碼塊end2.3運(yùn)算符2.3.1算術(shù)運(yùn)算符Ru中的算術(shù)運(yùn)算符包括以下幾種:加法()減法()乘法()除法(/)取模(%)冪運(yùn)算()2.3.2比較運(yùn)算符Ru中的比較運(yùn)算符包括以下幾種:等于(==)不等于(!=)大于(>)小于(<)大于等于(>=)小于等于(<=)2.3.3邏輯運(yùn)算符Ru中的邏輯運(yùn)算符包括以下幾種:邏輯與(&&)邏輯或()邏輯非(!)第三章Ru數(shù)組與哈希3.1數(shù)組的基本操作數(shù)組是Ru中一種用于存儲(chǔ)一系列元素的集合,這些元素可以是不同類型的。以下是數(shù)組的基本操作:3.1.1創(chuàng)建數(shù)組在Ru中,可以使用方括號(hào)``或`Array`類來(lái)創(chuàng)建數(shù)組:ruarr1=[1,2,3,4,5]arr2=Array.new([1,2,3,4,5])3.1.2訪問(wèn)數(shù)組元素可以通過(guò)索引來(lái)訪問(wèn)數(shù)組中的元素,索引從0開(kāi)始:ruputsarr1[0]輸出1putsarr1[1]輸出23.1.3修改數(shù)組元素可以直接通過(guò)索引修改數(shù)組中的元素:ruarr1[1]=10putsarr1輸出[1,10,3,4,5]3.1.4添加和刪除元素可以使用`<<`運(yùn)算符向數(shù)組末尾添加元素,使用`pop`和`shift`方法刪除元素:ruarr1<<6putsarr1輸出[1,10,3,4,5,6]arr(1)popputsarr1輸出[1,10,3,4,5]arr(1)shiftputsarr1輸出[10,3,4,5]3.2哈希的基本操作哈希是Ru中一種用于存儲(chǔ)鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu)。以下是哈希的基本操作:3.2.1創(chuàng)建哈希在Ru中,可以使用花括號(hào)`{}`或`Hash`類來(lái)創(chuàng)建哈希:ruhash1={'a'=>1,'b'=>2,'c'=>3}hash2=Hash.new({'a'=>1,'b'=>2,'c'=>3})3.2.2訪問(wèn)哈希元素可以通過(guò)鍵來(lái)訪問(wèn)哈希中的值:ruputshash1['a']輸出1putshash1['b']輸出23.2.3修改哈希元素可以直接通過(guò)鍵修改哈希中的值:ruhash1['a']=10putshash1輸出{"a"=>10,"b"=>2,"c"=>3}3.2.4添加和刪除鍵值對(duì)可以使用``運(yùn)算符向哈希中添加鍵值對(duì),使用`delete`方法刪除鍵值對(duì):ruhash1['d']=4putshash1輸出{"a"=>10,"b"=>2,"c"=>3,"d"=>4}hash(1)delete('b')putshash1輸出{"a"=>10,"c"=>3,"d"=>4}3.3數(shù)組與哈希的綜合應(yīng)用在實(shí)際編程中,數(shù)組與哈希經(jīng)常結(jié)合使用,以下是一些綜合應(yīng)用示例:3.3.1使用數(shù)組存儲(chǔ)多個(gè)哈希ruhash_array=[{'name'=>'Alice','age'=>25},{'name'=>'Bob','age'=>30},{'name'=>'Charlie','age'=>35}]hash_array.eachdohashputs"{hash['name']}is{hash['age']}yearsold."end3.3.2使用哈希存儲(chǔ)數(shù)組信息ruhash={'numbers'=>[1,2,3,4,5],'letters'=>['a','b','c','d','e']}hash.eachdokey,valueputs"{key}:{value}"end第四章Ru方法與模塊4.1方法定義與調(diào)用在Ru中,方法是執(zhí)行特定任務(wù)的代碼塊,它是對(duì)象的一部分。每個(gè)方法都包含返回值,這個(gè)值通常是通過(guò)方法體中的最后一條表達(dá)式得到的。方法的定義使用`def`關(guān)鍵字開(kāi)始,后跟方法名和參數(shù)列表(如果有的話),然后是大括號(hào)`{}`或關(guān)鍵字`do`和`end`來(lái)包圍方法體。以下是方法定義的基本結(jié)構(gòu):rudef方法名(參數(shù)列表)方法體end或者使用`do`和`end`:rudef方法名(參數(shù)列表)do方法體endendRu中的方法調(diào)用相對(duì)簡(jiǎn)單,通過(guò)對(duì)象后跟點(diǎn)號(hào)`.`和方法名來(lái)實(shí)現(xiàn)。如果方法是類方法,則通過(guò)類名調(diào)用。ru對(duì)象.方法名(參數(shù)列表)若是類方法,則:ru類名.方法名(參數(shù)列表)4.2模塊的定義與使用模塊(Module)是Ru中用于分組方法和常量的容器。它可以被視為一個(gè)沒(méi)有實(shí)例的類,不能被實(shí)例化。模塊主要用于混合(Mixin)功能,即將模塊的方法和屬性添加到其他對(duì)象中。模塊定義使用`module`關(guān)鍵字,后跟模塊名,然后是大括號(hào)`{}`或`do`和`end`以及模塊體:rumodule模塊名模塊體end模塊的使用主要有兩種方式:引入(`include`)和擴(kuò)展(`extend`)。通過(guò)`include`可以將模塊的方法混入到類中,成為類實(shí)例的一部分:ruclass類名include模塊名end通過(guò)`extend`可以將模塊的方法混入到類本身,成為類方法:ruclass類名extend模塊名end4.3方法的高級(jí)特性Ru方法具有一些高級(jí)特性,包括默認(rèn)參數(shù)、可變參數(shù)、參數(shù)的展開(kāi)以及方法的鏈?zhǔn)秸{(diào)用等。默認(rèn)參數(shù)允許在定義方法時(shí)為參數(shù)指定默認(rèn)值,如果調(diào)用方法時(shí)沒(méi)有提供對(duì)應(yīng)的參數(shù)值,則使用默認(rèn)值:rudef方法名(參數(shù)1,參數(shù)2=默認(rèn)值)方法體end可變參數(shù)使用``前綴標(biāo)記,它允許方法接收任意數(shù)量的參數(shù),這些參數(shù)在方法內(nèi)部以數(shù)組的形式出現(xiàn):rudef方法名(參數(shù)列表)方法體end參數(shù)的展開(kāi)允許將數(shù)組或散列的元素作為獨(dú)立的參數(shù)傳遞給方法:rudef方法名(參數(shù)1,參數(shù)列表)方法體end調(diào)用時(shí)數(shù)組.方法名(數(shù)組)方法的鏈?zhǔn)秸{(diào)用是Ru面向?qū)ο缶幊痰囊粋€(gè)特性,它允許方法的返回值作為下一個(gè)方法的調(diào)用對(duì)象,形成鏈?zhǔn)奖磉_(dá):ru對(duì)象.方法(1)方法(2)方法3這些高級(jí)特性使得Ru的方法定義和使用更加靈活和強(qiáng)大。第五章Ru面向?qū)ο缶幊?.1類的定義與使用在Ru中,類是面向?qū)ο缶幊痰幕A(chǔ)。類定義了對(duì)象的屬性和行為。以下是定義和使用類的基本步驟。定義類:在Ru中,類通過(guò)關(guān)鍵字`class`定義,后跟類名,類名通常使用駝峰式命名規(guī)則。類體內(nèi)可以定義屬性、方法和常量。ruclassMyClass類體end類屬性:類屬性是類級(jí)別的變量,屬于類本身,而非類的實(shí)例。通過(guò)`class<<self`或在類定義中直接定義。ruclassMyClassclass_variable='Thisisaclassvariable'class<<selfattr_accessor:another_class_variableendend實(shí)例變量和方法:實(shí)例變量是屬于類的實(shí)例的變量,通過(guò)`attr_accessor`等訪問(wèn)器方法進(jìn)行訪問(wèn)。實(shí)例方法則是定義在類體內(nèi)的普通方法。ruclassMyClassattr_accessor:instance_variabledefinitialize(value)instance_variable=valueenddefinstance_method方法體endend創(chuàng)建實(shí)例:使用`new`方法創(chuàng)建類的實(shí)例。rumy_instance=MyClass.new('example')5.2繼承與多態(tài)繼承是面向?qū)ο缶幊讨械囊环N機(jī)制,允許一個(gè)類繼承另一個(gè)類的特性。Ru中的繼承通過(guò)`<`運(yùn)算符實(shí)現(xiàn)。ruclassParentClassdefparent_method父類方法endendclassChildClass<ParentClassdefchild_method子類方法endend子類會(huì)繼承父類的方法和屬性。如果子類中定義了與父類同名的方法,則會(huì)覆蓋父類的方法,這稱為方法重寫。多態(tài)指的是不同類的對(duì)象可以響應(yīng)相同的消息(方法調(diào)用),并根據(jù)各自類的定義執(zhí)行不同的行為。ruclassAnimaldefspeakraiseNotImplementedError,"Subclassesmustimplementthismethod"endendclassDog<Animaldefspeak'Woof!'endendclassCat<Animaldefspeak'Meow!'endendanimals=[Dog.new,Cat.new]animals.eachdoanimalputsanimal.speakend5.3封裝與解耦封裝是面向?qū)ο缶幊痰牧硪粋€(gè)基本原則,意味著將對(duì)象的實(shí)現(xiàn)細(xì)節(jié)隱藏起來(lái),僅對(duì)外暴露必要的接口。在Ru中,方法默認(rèn)是公開(kāi)的,但可以通過(guò)使用`private`和`protected`關(guān)鍵字來(lái)限制方法的訪問(wèn)級(jí)別。ruclassMyClassdefpublic_method公開(kāi)方法endprivatedefprivate_method私有方法endend解耦是指減少不同模塊或組件之間的依賴關(guān)系,提高代碼的可維護(hù)性和可擴(kuò)展性。在Ru中,可以通過(guò)模塊來(lái)實(shí)現(xiàn)解耦。模塊是一種類似類的結(jié)構(gòu),但不能被實(shí)例化。它們通常用于組織和共享代碼。rumoduleMyModuledefshared_method共享方法endendclassMyClassincludeMyModuleend通過(guò)`include`關(guān)鍵字,可以將模塊的方法作為類的方法。這種方式促進(jìn)了代碼的復(fù)用,同時(shí)也保持了模塊和類的獨(dú)立性。第六章Ru異常處理6.1異常的基本概念在程序執(zhí)行過(guò)程中,可能會(huì)遇到各種不可預(yù)測(cè)的錯(cuò)誤,例如文件不存在、類型不匹配等,這些錯(cuò)誤可能導(dǎo)致程序異常終止。Ru提供了異常處理機(jī)制,使得程序能夠在出現(xiàn)錯(cuò)誤時(shí)進(jìn)行相應(yīng)的處理,保證程序能夠正常運(yùn)行。異常(Exception)是Ru中用于處理錯(cuò)誤的對(duì)象。在Ru中,所有的異常都繼承自基類Exception。Exception類及其子類定義了多種異常類型,以應(yīng)對(duì)不同的錯(cuò)誤情況。6.2異常的捕獲與處理異常的捕獲與處理是通過(guò)beginend語(yǔ)句塊來(lái)實(shí)現(xiàn)的。在beginend語(yǔ)句塊中,可以編寫可能引發(fā)異常的代碼,并通過(guò)rescue子句來(lái)捕獲和處理異常。以下是異常捕獲的基本語(yǔ)法:rubegin可能引發(fā)異常的代碼rescue=>e處理異常的代碼end其中,`rescue`關(guān)鍵字用于捕獲異常,`e`是異常對(duì)象的實(shí)例。在捕獲異常后,可以訪問(wèn)異常對(duì)象的屬性和方法,以便對(duì)異常進(jìn)行進(jìn)一步處理。如果需要對(duì)多種異常進(jìn)行處理,可以使用多個(gè)rescue子句:rubegin可能引發(fā)異常的代碼rescueStandardError=>e1處理StandardError異常的代碼rescueTimeoutError=>e2處理TimeoutError異常的代碼end在處理異常時(shí),還可以使用else子句來(lái)執(zhí)行沒(méi)有異常發(fā)生時(shí)的代碼,以及ensure子句來(lái)保證某些代碼無(wú)論是否發(fā)生異常都會(huì)執(zhí)行:rubegin可能引發(fā)異常的代碼rescue=>e處理異常的代碼else沒(méi)有異常發(fā)生時(shí)執(zhí)行的代碼ensure無(wú)論是否發(fā)生異常都要執(zhí)行的代碼end6.3異常的拋出與自定義異常除了捕獲和處理異常外,Ru還允許拋出(raise)異常。拋出異常可以使用raise關(guān)鍵字,后跟異常對(duì)象或異常類的名稱。ruraise"出現(xiàn)錯(cuò)誤"或者,拋出一個(gè)特定的異常類:ruraiseStandardError,"出現(xiàn)標(biāo)準(zhǔn)錯(cuò)誤"在開(kāi)發(fā)過(guò)程中,有時(shí)需要自定義異常類以滿足特定需求。自定義異常類通常繼承自Exception或其子類。以下是一個(gè)自定義異常類的示例:ruclassCustomError<StandardErrordefinitialize(message)super(message)endend在代碼中,可以使用自定義異常類來(lái)拋出異常:ruraiseCustomError,"出現(xiàn)自定義錯(cuò)誤"通過(guò)自定義異常類,可以使異常處理更加清晰、具體,有助于維護(hù)和調(diào)試程序。第七章Ru文件操作7.1文件讀寫基礎(chǔ)7.1.1文件打開(kāi)與關(guān)閉在Ru中,文件操作通常需要先打開(kāi)文件,然后進(jìn)行讀寫操作,最后關(guān)閉文件。以下為打開(kāi)和關(guān)閉文件的常用方法:ru打開(kāi)文件file=File.open("example.txt","r")讀寫操作關(guān)閉文件file.close其中,`"r"`表示以只讀模式打開(kāi)文件。除此之外,還有`"r"`(讀寫模式)、`"w"`(只寫模式,若文件不存在則創(chuàng)建)等不同的模式。7.1.2讀取文件內(nèi)容讀取文件內(nèi)容有多種方法,以下列舉幾種常用的讀取方式:ru讀取整個(gè)文件內(nèi)容content=File.read("example.txt")按行讀取文件內(nèi)容File.open("example.txt","r")dofilefile.each_linedolineputslineendend逐字符讀取文件內(nèi)容File.open("example.txt","r")dofilefile.each_chardocharputscharendend7.1.3寫入文件內(nèi)容寫入文件內(nèi)容的方法有以下幾種:ru向文件寫入內(nèi)容,若文件不存在則創(chuàng)建File.write("example.txt","Hello,world!")追加內(nèi)容到文件末尾File.open("example.txt","a")dofilefile.write("\nThisisanewline.")end7.2目錄操作7.2.1創(chuàng)建目錄創(chuàng)建目錄可以使用`Dir.mkdir`方法:ruDir.mkdir("new_directory")7.2.2刪除目錄刪除目錄可以使用`Dir.rmdir`方法,但需要注意目錄必須為空:ruDir.rmdir("new_directory")7.2.3列出目錄內(nèi)容列出目錄內(nèi)容可以使用`Dir.entries`方法:ruDir.entries("new_directory").eachdoentryputsentryend7.2.4改變當(dāng)前工作目錄改變當(dāng)前工作目錄可以使用`Dir.chdir`方法:ruDir.chdir("new_directory")7.3文件與目錄的高級(jí)操作7.3.1文件復(fù)制與移動(dòng)文件復(fù)制可以使用`File.copy`方法:ruFile.copy("source.txt","destination.txt")文件移動(dòng)可以使用`File.rename`方法:ruFile.rename("source.txt","destination.txt")7.3.2獲取文件屬性獲取文件屬性可以使用`File.stat`方法:rufile_stat=File.stat("example.txt")獲取文件大小putsfile_stat.size獲取文件修改時(shí)間putsfile_stat.mtime7.3.3文件名與路徑操作文件名與路徑操作可以使用`File.basename`和`File.dirname`方法:rufilename=File.basename("/path/to/example.txt")putsfilename輸出:example.txtdirectory=File.dirname("/path/to/example.txt")putsdirectory輸出:/path/to第八章Ru網(wǎng)絡(luò)編程8.1套接字編程基礎(chǔ)8.1.1套接字的概述套接字是計(jì)算機(jī)網(wǎng)絡(luò)通信的基本單元,它允許應(yīng)用程序通過(guò)不同的網(wǎng)絡(luò)協(xié)議進(jìn)行數(shù)據(jù)交換。在Ru中,套接字編程是通過(guò)內(nèi)置的Socket類實(shí)現(xiàn)的。Socket類提供了創(chuàng)建、連接、監(jiān)聽(tīng)、發(fā)送和接收數(shù)據(jù)等操作。8.1.2Socket類的使用在Ru中,使用Socket類創(chuàng)建套接字的基本步驟如下:(1)導(dǎo)入Socket庫(kù):`require'socket'`(2)創(chuàng)建Socket對(duì)象:`socket=Socket.new(AF_INET,SOCK_STREAM,nil)`(3)連接到服務(wù)器:`socket.connect(server_address,server_port)`(4)發(fā)送數(shù)據(jù):`socket.send(data,0)`(5)接收數(shù)據(jù):`socket.recv(buffer_size)`(6)關(guān)閉套接字:`socket.close`8.1.3TCP客戶端與服務(wù)器示例以下是一個(gè)簡(jiǎn)單的TCP客戶端與服務(wù)器通信的示例:服務(wù)器端代碼:rurequire'socket'server=TCPServer.new()loopdoclient=server.acceptputs"Clientconnected:{client.peeraddr[2]}"client.puts"Hello,client!"client.closeend客戶端代碼:rurequire'socket'socket=TCPSocket.new('localhost',)putssocket.getssocket.close8.2HTTP請(qǐng)求與響應(yīng)8.2.1HTTP協(xié)議概述HTTP(超文本傳輸協(xié)議)是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的網(wǎng)絡(luò)協(xié)議之一,用于在Web瀏覽器和服務(wù)器之間傳輸數(shù)據(jù)。HTTP協(xié)議基于請(qǐng)求響應(yīng)模式,包括請(qǐng)求方法和響應(yīng)狀態(tài)碼等。8.2.2使用HTTP類發(fā)送請(qǐng)求在Ru中,可以使用Net::HTTP類發(fā)送HTTP請(qǐng)求。以下是一個(gè)簡(jiǎn)單的GET請(qǐng)求示例:rurequire'net/'uri=URI('://example.')response=Net::HTTP.get(uri)putsresponse8.2.3使用HTTP類處理響應(yīng)Net::HTTP類提供了多種方法來(lái)處理HTTP響應(yīng)。以下是一個(gè)處理響應(yīng)的示例:rurequire'net/'uri=URI('://example.')request=Net::HTTP::Get.new(uri.request_uri)response=.request(request)puts"Response:{response.}"puts"Responsebody:{response.body}"8.3網(wǎng)絡(luò)編程綜合應(yīng)用8.3.1網(wǎng)絡(luò)爬蟲網(wǎng)絡(luò)爬蟲是一種自動(dòng)化程序,用于從互聯(lián)網(wǎng)上收集信息。以下是一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)爬蟲示例,使用Socket類和HTTP類實(shí)現(xiàn):rurequire'socket'require'net/'require'uri'deffetch_()uri=URI()request=Net::HTTP::Get.new(uri.request_uri)response=.request(request)response.bodyenddefcrawl()puts"Fetching:{}"page_content=fetch_()puts"Fetched:{}"page_contentendcrawl('://example.')8.3.2網(wǎng)絡(luò)聊天室以下是一個(gè)基于TCP套接字的簡(jiǎn)單網(wǎng)絡(luò)聊天室示例:服務(wù)器端代碼:rurequire'socket'server=TCPServer.new()loopdoclient=server.acceptputs"Clientconnected:{client.peeraddr[2]}"Thread.new(client)docloopdomessage=c.getsbreakifmessage.nil?puts"Received:{message}"endc.closeendend客戶端代碼:rurequire'socket'socket=TCPSocket.new('localhost',)loopdoprint"Entermessage:"message=getssocket.putsmessageresponse=socket.getsputs"Serverresponse:{response}"endsocket.close第九章Ru多線程編程9.1線程的創(chuàng)建與管理9.1.1線程的創(chuàng)建在Ru中,線程的創(chuàng)建可以通過(guò)Thread類來(lái)實(shí)現(xiàn)。以下是一個(gè)創(chuàng)建線程的基本示例:ruthread=Thread.newdo線程執(zhí)行的代碼end在上述代碼中,Thread.new方法接收一個(gè)代碼塊,該代碼塊是線程需要執(zhí)行的代碼。當(dāng)調(diào)用Thread.new時(shí),Ru會(huì)創(chuàng)建一個(gè)新的線程,并在該線程中執(zhí)行傳入的代碼塊。9.1.2線程的管理Ru提供了多種方法用于管理線程,以下是一些常用的線程管理方法:`Threadjoin`:等待指定線程結(jié)束。調(diào)用此方法會(huì)阻塞當(dāng)前線程,直到指定線程執(zhí)行完畢。`Threadabort_on_exception`:設(shè)置線程在遇到異常時(shí)是否終止。默認(rèn)情況下,子線程在遇到異常時(shí)會(huì)終止,但主線程不會(huì)受到影響。`Threadexit`:主動(dòng)終止當(dāng)前線程的執(zhí)行。示例代碼:ruthread=Thread.newdo線程執(zhí)行的代碼end等待線程結(jié)束thread.join設(shè)置子線程遇到異常時(shí)不終止Thread.abort_on_exception=false9.2線程同步與通信9.2.1互斥鎖(Mutex)互斥鎖(Mutex)是一種同步機(jī)制,用于保證多個(gè)線程在訪問(wèn)共享資源時(shí)不會(huì)產(chǎn)生沖突。在Ru中,可以通過(guò)Mutex類來(lái)實(shí)現(xiàn)互斥鎖。以下是一個(gè)使用互斥鎖的示例:rumutex=Mutex.newmutex.lock訪問(wèn)共享資源的代碼mutex.unlock9.2.2條件變量(Condition)條件變量(Condition)用于在線程之間進(jìn)行通信。當(dāng)某個(gè)線程需要等待某個(gè)條件成立時(shí),可以使用條件變量進(jìn)行等待。以下是一個(gè)使用條件變量的示例:rucondition=Condition.newmutex=Mutex.newmutex.lock等待條件成立condition.wait(mutex)條件成立后執(zhí)行的代碼mutex.unlock9.2.3信號(hào)量(Semaphore)信號(hào)量(Semaphore)用于控制多個(gè)線程對(duì)共享資源的訪問(wèn)。在Ru中,可以通過(guò)Semaphore類來(lái)實(shí)現(xiàn)信號(hào)量。以下是一個(gè)使用信號(hào)量的示例:rusemaphore=Semaphore.new(1)semaphore.synchronizedo訪問(wèn)共享資源的代碼end9.3線程安全與并發(fā)9.3.1線程安全線程安全是指在多線程環(huán)境下,代碼塊在執(zhí)行時(shí)不會(huì)被其他線程干擾。為了保證線程安全,可以采取以下措施:使用互斥鎖(Mutex)保護(hù)共享資源。避免在多線程環(huán)境中使用全局變量。使用線程安全的數(shù)據(jù)結(jié)構(gòu),如Queue。9.3.2并發(fā)并發(fā)是指在多線程環(huán)境中,多個(gè)線程同時(shí)執(zhí)行。為了保證并發(fā)執(zhí)行的正確性,可以采取以下措施:合理分配線程資源,避免創(chuàng)建過(guò)多線程。使用線程池(ThreadPool)來(lái)管理線程。使用線程同步機(jī)制,如互斥鎖、條件變量和信號(hào)量。第十章Ru實(shí)踐項(xiàng)目10.1簡(jiǎn)單計(jì)算器程序10.1.1項(xiàng)目概述本節(jié)將指導(dǎo)讀者利用Ru語(yǔ)言開(kāi)發(fā)一個(gè)簡(jiǎn)單的控制臺(tái)計(jì)算器程序。該程序能夠接收用戶輸入,并根據(jù)用戶選擇的操作執(zhí)行加、減、乘、除等基本數(shù)學(xué)運(yùn)算。10.1.2設(shè)計(jì)思路程序首先展示一個(gè)菜單,引導(dǎo)用戶選擇操作類型。用戶輸入兩個(gè)數(shù)字和操作類型后,程序?qū)?zhí)行相應(yīng)的數(shù)學(xué)運(yùn)算,并輸出結(jié)果。10.1.3實(shí)現(xiàn)代碼以下是一個(gè)簡(jiǎn)單計(jì)算器程序的基本實(shí)現(xiàn)代碼。rudefadd(x,y)xyenddefsubtract(x,y)xyenddefmultiply(x,y)xyenddefdivide(x,y)x.to_f/yendputs"簡(jiǎn)單計(jì)算器"loopdoprint"請(qǐng)選擇操作[1]加[2]減[3]乘[4]除[5]退出:"operation=gets.to_ibreakifoperation==5print"請(qǐng)輸入第一個(gè)數(shù)字:"num1=gets.to_fprint"請(qǐng)輸入第二個(gè)數(shù)字:"num2=gets.to_fcaseoperationwhen1puts"結(jié)果是:{add(num1,num2)}"when2puts"結(jié)果是:{subtr
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 出租車營(yíng)運(yùn)權(quán)承包及管理服務(wù)合同
- 文化遺產(chǎn)插畫創(chuàng)作委托協(xié)議
- 老人皮膚護(hù)理課件
- 老人消防安全課件圖片
- 老人居家護(hù)理課件
- 美術(shù)白菜課件兒童
- 機(jī)關(guān)安全生產(chǎn)
- 安全生產(chǎn)工作督導(dǎo)檢查簡(jiǎn)報(bào)
- 消防安全檢查通訊
- 因私出國(guó)自查情況匯報(bào)
- 律師事務(wù)所客戶數(shù)據(jù)安全管理制度
- 2025數(shù)學(xué)新課程標(biāo)準(zhǔn)培訓(xùn)
- 稅務(wù)講座課件
- 2025年暑假實(shí)踐作業(yè)模板【課件】
- 學(xué)校食堂暑假前收尾工作指南
- 休閑車零部件回收再利用創(chuàng)新創(chuàng)業(yè)項(xiàng)目商業(yè)計(jì)劃書
- 滴灌帶生產(chǎn)項(xiàng)目可行性研究報(bào)告-D
- 消防系統(tǒng)維護(hù)保養(yǎng)方案
- 骨科護(hù)理實(shí)習(xí)生小講課
- 四川省南充市2023-2024學(xué)年七年級(jí)下學(xué)期期末考試道德與法治試卷(含答案)
- 2025至2030中國(guó)汽車散熱器行業(yè)市場(chǎng)發(fā)展分析及商業(yè)模式與投融資發(fā)展報(bào)告
評(píng)論
0/150
提交評(píng)論