版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
Ru基礎知識作業(yè)指導書TOC\o"1-2"\h\u9990第一章Ru概述 3320711.1Ru語言簡介 3162641.2Ru安裝與配置 322122第二章Ru語法基礎 4129952.1變量與數(shù)據(jù)類型 4196902.1.1變量的定義與使用 4313072.1.2數(shù)據(jù)類型 487932.2控制結構 5283032.2.1條件語句 5322572.2.2循環(huán)語句 5286362.3運算符 611232.3.1算術運算符 6267452.3.2比較運算符 6305692.3.3邏輯運算符 730836第三章Ru數(shù)組與哈希 734373.1數(shù)組的基本操作 7248673.1.1創(chuàng)建數(shù)組 7238833.1.2訪問數(shù)組元素 7136713.1.3修改數(shù)組元素 7286823.1.4添加和刪除元素 7156553.2哈希的基本操作 8196963.2.1創(chuàng)建哈希 8116903.2.2訪問哈希元素 8150873.2.3修改哈希元素 896523.2.4添加和刪除鍵值對 827743.3數(shù)組與哈希的綜合應用 950103.3.1使用數(shù)組存儲多個哈希 960563.3.2使用哈希存儲數(shù)組信息 97288第四章Ru方法與模塊 9222754.1方法定義與調(diào)用 961104.2模塊的定義與使用 10249694.3方法的高級特性 111731第五章Ru面向?qū)ο缶幊?12234495.1類的定義與使用 12281525.2繼承與多態(tài) 13104705.3封裝與解耦 1429673第六章Ru異常處理 15270516.1異常的基本概念 15259766.2異常的捕獲與處理 16303436.3異常的拋出與自定義異常 178936第七章Ru文件操作 17307997.1文件讀寫基礎 18155947.1.1文件打開與關閉 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改變當前工作目錄 1945887.3文件與目錄的高級操作 1927947.3.1文件復制與移動 20115867.3.2獲取文件屬性 20175207.3.3文件名與路徑操作 2020919第八章Ru網(wǎng)絡編程 2023318.1套接字編程基礎 20323078.1.1套接字的概述 20251708.1.2Socket類的使用 20277018.1.3TCP客戶端與服務器示例 21272598.2HTTP請求與響應 2181368.2.1HTTP協(xié)議概述 2191398.2.2使用HTTP類發(fā)送請求 22204618.2.3使用HTTP類處理響應 22309778.3網(wǎng)絡編程綜合應用 22131638.3.1網(wǎng)絡爬蟲 22262168.3.2網(wǎng)絡聊天室 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信號量(Semaphore) 26320049.3線程安全與并發(fā) 2677809.3.1線程安全 26312439.3.2并發(fā) 2614323第十章Ru實踐項目 26693110.1簡單計算器程序 261148110.1.1項目概述 262074310.1.2設計思路 273051410.1.3實現(xiàn)代碼 271203010.2數(shù)據(jù)庫操作示例 28854310.2.1項目概述 282940510.2.2設計思路 282526210.2.3實現(xiàn)代碼 28302010.3Web應用程序開發(fā)示例 293032110.3.1項目概述 292187510.3.2設計思路 291044010.3.3實現(xiàn)代碼 29第一章Ru概述1.1Ru語言簡介Ru是一種開源的、面向?qū)ο蟮哪_本語言,由日本程序員松本行弘(YukihiroMatsumoto,簡稱Matz)于1993年設計,并于1995年首次發(fā)布。Ru旨在提供一種易于閱讀、編寫和理解的語言,同時具備強大的面向?qū)ο蠊δ?。Ru的語法簡潔明了,支持多種編程范式,包括面向?qū)ο?、函?shù)式、命令式等。Ru在國際上擁有廣泛的用戶群體,特別是在Web開發(fā)領域,RuonRails(簡稱Rails)框架的推出,使得Ru語言的知名度迅速提升。在我國,Ru也逐漸受到越來越多的關注和應用。1.2Ru安裝與配置Ru的安裝與配置過程相對簡單,以下是在Windows和Linux系統(tǒng)中安裝Ru的方法:(1)Windows系統(tǒng):(1)RuInstaller:訪問RuInstaller官方網(wǎng)站(s:///),最新版本的RuInstaller。(2)安裝Ru:雙擊的RuInstaller安裝包,按照提示完成安裝。安裝過程中,建議勾選“AddRutoPATH”選項,以便在命令行中直接使用Ru命令。(3)驗證安裝:打開命令行窗口,輸入以下命令,查看Ru版本:ruv若返回Ru版本信息,則表示安裝成功。(2)Linux系統(tǒng):(1)更新系統(tǒng):在終端輸入以下命令,保證系統(tǒng)軟件包更新到最新版本:sudoaptgetupdate(2)安裝Ru:輸入以下命令,安裝Ru:sudoaptgetinstallru(3)驗證安裝:打開終端,輸入以下命令,查看Ru版本:ruv若返回Ru版本信息,則表示安裝成功。在安裝Ru后,可以根據(jù)需要安裝Ru的擴展庫。Ru的擴展庫稱為Gem,可以通過RuGems工具進行安裝。以下為安裝RuGems的方法:(1)Windows系統(tǒng):在RuInstaller安裝目錄下,找到并運行`ridkinstall`命令。(2)Linux系統(tǒng):輸入以下命令,安裝RuGems:sudoaptgetinstallrugems安裝完成后,可以通過以下命令安裝Ru擴展庫:geminstall[gem_name]其中,[gem_name]為要安裝的擴展庫名稱。第二章Ru語法基礎2.1變量與數(shù)據(jù)類型2.1.1變量的定義與使用在Ru中,變量是用來存儲數(shù)據(jù)的標識符。變量的命名規(guī)則遵循以下原則:以小寫字母或下劃線開頭,后續(xù)字符可以是字母、數(shù)字或下劃線。以下是幾種常見的變量類型:局部變量:作用域限于當前方法或代碼塊內(nèi)。實例變量:作用域限于當前對象的實例內(nèi),以符號開頭。類變量:作用域限于當前類的所有實例內(nèi),以符號開頭。全局變量:作用域貫穿整個程序,以$符號開頭。2.1.2數(shù)據(jù)類型Ru中的數(shù)據(jù)類型主要包括以下幾種:數(shù)字(Numeric):包括整數(shù)(Integer)和浮點數(shù)(Float)。字符串(String):由字符序列組成的不可變序列。布爾值(Boolean):包括true和false兩種值。數(shù)組(Array):一系列元素的集合,元素類型可以不同。哈希(Hash):鍵值對的集合,鍵和值可以是任意類型。2.2控制結構2.2.1條件語句Ru中的條件語句包括if、unless、case等。以下是幾種常用的條件語句:if語句:根據(jù)條件表達式判斷是否執(zhí)行代碼塊。ruifcondition條件為真時執(zhí)行的代碼塊endunless語句:與if語句相反,當條件為假時執(zhí)行代碼塊。ruunlesscondition條件為假時執(zhí)行的代碼塊endcase語句:根據(jù)條件匹配執(zhí)行相應的代碼塊。rucasevariablewhenvalue1當variable等于value1時執(zhí)行的代碼塊whenvalue2當variable等于value2時執(zhí)行的代碼塊else當以上條件都不滿足時執(zhí)行的代碼塊end2.2.2循環(huán)語句Ru中的循環(huán)語句包括for、while、until等。以下是幾種常用的循環(huán)語句:for循環(huán):遍歷數(shù)組或范圍內(nèi)的元素。ruforelementinarray對每個元素執(zhí)行的代碼塊endwhile循環(huán):當條件為真時,重復執(zhí)行代碼塊。ruwhilecondition條件為真時執(zhí)行的代碼塊enduntil循環(huán):當條件為假時,重復執(zhí)行代碼塊。ruuntilcondition條件為假時執(zhí)行的代碼塊end2.3運算符2.3.1算術運算符Ru中的算術運算符包括以下幾種:加法()減法()乘法()除法(/)取模(%)冪運算()2.3.2比較運算符Ru中的比較運算符包括以下幾種:等于(==)不等于(!=)大于(>)小于(<)大于等于(>=)小于等于(<=)2.3.3邏輯運算符Ru中的邏輯運算符包括以下幾種:邏輯與(&&)邏輯或()邏輯非(!)第三章Ru數(shù)組與哈希3.1數(shù)組的基本操作數(shù)組是Ru中一種用于存儲一系列元素的集合,這些元素可以是不同類型的。以下是數(shù)組的基本操作:3.1.1創(chuàng)建數(shù)組在Ru中,可以使用方括號``或`Array`類來創(chuàng)建數(shù)組:ruarr1=[1,2,3,4,5]arr2=Array.new([1,2,3,4,5])3.1.2訪問數(shù)組元素可以通過索引來訪問數(shù)組中的元素,索引從0開始:ruputsarr1[0]輸出1putsarr1[1]輸出23.1.3修改數(shù)組元素可以直接通過索引修改數(shù)組中的元素:ruarr1[1]=10putsarr1輸出[1,10,3,4,5]3.1.4添加和刪除元素可以使用`<<`運算符向數(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中一種用于存儲鍵值對的數(shù)據(jù)結構。以下是哈希的基本操作:3.2.1創(chuàng)建哈希在Ru中,可以使用花括號`{}`或`Hash`類來創(chuàng)建哈希:ruhash1={'a'=>1,'b'=>2,'c'=>3}hash2=Hash.new({'a'=>1,'b'=>2,'c'=>3})3.2.2訪問哈希元素可以通過鍵來訪問哈希中的值:ruputshash1['a']輸出1putshash1['b']輸出23.2.3修改哈希元素可以直接通過鍵修改哈希中的值:ruhash1['a']=10putshash1輸出{"a"=>10,"b"=>2,"c"=>3}3.2.4添加和刪除鍵值對可以使用``運算符向哈希中添加鍵值對,使用`delete`方法刪除鍵值對: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ù)組與哈希的綜合應用在實際編程中,數(shù)組與哈希經(jīng)常結合使用,以下是一些綜合應用示例:3.3.1使用數(shù)組存儲多個哈希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使用哈希存儲數(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í)行特定任務的代碼塊,它是對象的一部分。每個方法都包含返回值,這個值通常是通過方法體中的最后一條表達式得到的。方法的定義使用`def`關鍵字開始,后跟方法名和參數(shù)列表(如果有的話),然后是大括號`{}`或關鍵字`do`和`end`來包圍方法體。以下是方法定義的基本結構:rudef方法名(參數(shù)列表)方法體end或者使用`do`和`end`:rudef方法名(參數(shù)列表)do方法體endendRu中的方法調(diào)用相對簡單,通過對象后跟點號`.`和方法名來實現(xiàn)。如果方法是類方法,則通過類名調(diào)用。ru對象.方法名(參數(shù)列表)若是類方法,則:ru類名.方法名(參數(shù)列表)4.2模塊的定義與使用模塊(Module)是Ru中用于分組方法和常量的容器。它可以被視為一個沒有實例的類,不能被實例化。模塊主要用于混合(Mixin)功能,即將模塊的方法和屬性添加到其他對象中。模塊定義使用`module`關鍵字,后跟模塊名,然后是大括號`{}`或`do`和`end`以及模塊體:rumodule模塊名模塊體end模塊的使用主要有兩種方式:引入(`include`)和擴展(`extend`)。通過`include`可以將模塊的方法混入到類中,成為類實例的一部分:ruclass類名include模塊名end通過`extend`可以將模塊的方法混入到類本身,成為類方法:ruclass類名extend模塊名end4.3方法的高級特性Ru方法具有一些高級特性,包括默認參數(shù)、可變參數(shù)、參數(shù)的展開以及方法的鏈式調(diào)用等。默認參數(shù)允許在定義方法時為參數(shù)指定默認值,如果調(diào)用方法時沒有提供對應的參數(shù)值,則使用默認值:rudef方法名(參數(shù)1,參數(shù)2=默認值)方法體end可變參數(shù)使用``前綴標記,它允許方法接收任意數(shù)量的參數(shù),這些參數(shù)在方法內(nèi)部以數(shù)組的形式出現(xiàn):rudef方法名(參數(shù)列表)方法體end參數(shù)的展開允許將數(shù)組或散列的元素作為獨立的參數(shù)傳遞給方法:rudef方法名(參數(shù)1,參數(shù)列表)方法體end調(diào)用時數(shù)組.方法名(數(shù)組)方法的鏈式調(diào)用是Ru面向?qū)ο缶幊痰囊粋€特性,它允許方法的返回值作為下一個方法的調(diào)用對象,形成鏈式表達:ru對象.方法(1)方法(2)方法3這些高級特性使得Ru的方法定義和使用更加靈活和強大。第五章Ru面向?qū)ο缶幊?.1類的定義與使用在Ru中,類是面向?qū)ο缶幊痰幕A。類定義了對象的屬性和行為。以下是定義和使用類的基本步驟。定義類:在Ru中,類通過關鍵字`class`定義,后跟類名,類名通常使用駝峰式命名規(guī)則。類體內(nèi)可以定義屬性、方法和常量。ruclassMyClass類體end類屬性:類屬性是類級別的變量,屬于類本身,而非類的實例。通過`class<<self`或在類定義中直接定義。ruclassMyClassclass_variable='Thisisaclassvariable'class<<selfattr_accessor:another_class_variableendend實例變量和方法:實例變量是屬于類的實例的變量,通過`attr_accessor`等訪問器方法進行訪問。實例方法則是定義在類體內(nèi)的普通方法。ruclassMyClassattr_accessor:instance_variabledefinitialize(value)instance_variable=valueenddefinstance_method方法體endend創(chuàng)建實例:使用`new`方法創(chuàng)建類的實例。rumy_instance=MyClass.new('example')5.2繼承與多態(tài)繼承是面向?qū)ο缶幊讨械囊环N機制,允許一個類繼承另一個類的特性。Ru中的繼承通過`<`運算符實現(xiàn)。ruclassParentClassdefparent_method父類方法endendclassChildClass<ParentClassdefchild_method子類方法endend子類會繼承父類的方法和屬性。如果子類中定義了與父類同名的方法,則會覆蓋父類的方法,這稱為方法重寫。多態(tài)指的是不同類的對象可以響應相同的消息(方法調(diào)用),并根據(jù)各自類的定義執(zhí)行不同的行為。ruclassAnimaldefspeakraiseNotImplementedError,"Subclassesmustimplementthismethod"endendclassDog<Animaldefspeak'Woof!'endendclassCat<Animaldefspeak'Meow!'endendanimals=[Dog.new,Cat.new]animals.eachdoanimalputsanimal.speakend5.3封裝與解耦封裝是面向?qū)ο缶幊痰牧硪粋€基本原則,意味著將對象的實現(xiàn)細節(jié)隱藏起來,僅對外暴露必要的接口。在Ru中,方法默認是公開的,但可以通過使用`private`和`protected`關鍵字來限制方法的訪問級別。ruclassMyClassdefpublic_method公開方法endprivatedefprivate_method私有方法endend解耦是指減少不同模塊或組件之間的依賴關系,提高代碼的可維護性和可擴展性。在Ru中,可以通過模塊來實現(xiàn)解耦。模塊是一種類似類的結構,但不能被實例化。它們通常用于組織和共享代碼。rumoduleMyModuledefshared_method共享方法endendclassMyClassincludeMyModuleend通過`include`關鍵字,可以將模塊的方法作為類的方法。這種方式促進了代碼的復用,同時也保持了模塊和類的獨立性。第六章Ru異常處理6.1異常的基本概念在程序執(zhí)行過程中,可能會遇到各種不可預測的錯誤,例如文件不存在、類型不匹配等,這些錯誤可能導致程序異常終止。Ru提供了異常處理機制,使得程序能夠在出現(xiàn)錯誤時進行相應的處理,保證程序能夠正常運行。異常(Exception)是Ru中用于處理錯誤的對象。在Ru中,所有的異常都繼承自基類Exception。Exception類及其子類定義了多種異常類型,以應對不同的錯誤情況。6.2異常的捕獲與處理異常的捕獲與處理是通過beginend語句塊來實現(xiàn)的。在beginend語句塊中,可以編寫可能引發(fā)異常的代碼,并通過rescue子句來捕獲和處理異常。以下是異常捕獲的基本語法:rubegin可能引發(fā)異常的代碼rescue=>e處理異常的代碼end其中,`rescue`關鍵字用于捕獲異常,`e`是異常對象的實例。在捕獲異常后,可以訪問異常對象的屬性和方法,以便對異常進行進一步處理。如果需要對多種異常進行處理,可以使用多個rescue子句:rubegin可能引發(fā)異常的代碼rescueStandardError=>e1處理StandardError異常的代碼rescueTimeoutError=>e2處理TimeoutError異常的代碼end在處理異常時,還可以使用else子句來執(zhí)行沒有異常發(fā)生時的代碼,以及ensure子句來保證某些代碼無論是否發(fā)生異常都會執(zhí)行:rubegin可能引發(fā)異常的代碼rescue=>e處理異常的代碼else沒有異常發(fā)生時執(zhí)行的代碼ensure無論是否發(fā)生異常都要執(zhí)行的代碼end6.3異常的拋出與自定義異常除了捕獲和處理異常外,Ru還允許拋出(raise)異常。拋出異常可以使用raise關鍵字,后跟異常對象或異常類的名稱。ruraise"出現(xiàn)錯誤"或者,拋出一個特定的異常類:ruraiseStandardError,"出現(xiàn)標準錯誤"在開發(fā)過程中,有時需要自定義異常類以滿足特定需求。自定義異常類通常繼承自Exception或其子類。以下是一個自定義異常類的示例:ruclassCustomError<StandardErrordefinitialize(message)super(message)endend在代碼中,可以使用自定義異常類來拋出異常:ruraiseCustomError,"出現(xiàn)自定義錯誤"通過自定義異常類,可以使異常處理更加清晰、具體,有助于維護和調(diào)試程序。第七章Ru文件操作7.1文件讀寫基礎7.1.1文件打開與關閉在Ru中,文件操作通常需要先打開文件,然后進行讀寫操作,最后關閉文件。以下為打開和關閉文件的常用方法:ru打開文件file=File.open("example.txt","r")讀寫操作關閉文件file.close其中,`"r"`表示以只讀模式打開文件。除此之外,還有`"r"`(讀寫模式)、`"w"`(只寫模式,若文件不存在則創(chuàng)建)等不同的模式。7.1.2讀取文件內(nèi)容讀取文件內(nèi)容有多種方法,以下列舉幾種常用的讀取方式:ru讀取整個文件內(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改變當前工作目錄改變當前工作目錄可以使用`Dir.chdir`方法:ruDir.chdir("new_directory")7.3文件與目錄的高級操作7.3.1文件復制與移動文件復制可以使用`File.copy`方法:ruFile.copy("source.txt","destination.txt")文件移動可以使用`File.rename`方法:ruFile.rename("source.txt","destination.txt")7.3.2獲取文件屬性獲取文件屬性可以使用`File.stat`方法:rufile_stat=File.stat("example.txt")獲取文件大小putsfile_stat.size獲取文件修改時間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)絡編程8.1套接字編程基礎8.1.1套接字的概述套接字是計算機網(wǎng)絡通信的基本單元,它允許應用程序通過不同的網(wǎng)絡協(xié)議進行數(shù)據(jù)交換。在Ru中,套接字編程是通過內(nèi)置的Socket類實現(xiàn)的。Socket類提供了創(chuàng)建、連接、監(jiān)聽、發(fā)送和接收數(shù)據(jù)等操作。8.1.2Socket類的使用在Ru中,使用Socket類創(chuàng)建套接字的基本步驟如下:(1)導入Socket庫:`require'socket'`(2)創(chuàng)建Socket對象:`socket=Socket.new(AF_INET,SOCK_STREAM,nil)`(3)連接到服務器:`socket.connect(server_address,server_port)`(4)發(fā)送數(shù)據(jù):`socket.send(data,0)`(5)接收數(shù)據(jù):`socket.recv(buffer_size)`(6)關閉套接字:`socket.close`8.1.3TCP客戶端與服務器示例以下是一個簡單的TCP客戶端與服務器通信的示例:服務器端代碼: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請求與響應8.2.1HTTP協(xié)議概述HTTP(超文本傳輸協(xié)議)是互聯(lián)網(wǎng)上應用最為廣泛的網(wǎng)絡協(xié)議之一,用于在Web瀏覽器和服務器之間傳輸數(shù)據(jù)。HTTP協(xié)議基于請求響應模式,包括請求方法和響應狀態(tài)碼等。8.2.2使用HTTP類發(fā)送請求在Ru中,可以使用Net::HTTP類發(fā)送HTTP請求。以下是一個簡單的GET請求示例:rurequire'net/'uri=URI('://example.')response=Net::HTTP.get(uri)putsresponse8.2.3使用HTTP類處理響應Net::HTTP類提供了多種方法來處理HTTP響應。以下是一個處理響應的示例: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)絡編程綜合應用8.3.1網(wǎng)絡爬蟲網(wǎng)絡爬蟲是一種自動化程序,用于從互聯(lián)網(wǎng)上收集信息。以下是一個簡單的網(wǎng)絡爬蟲示例,使用Socket類和HTTP類實現(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)絡聊天室以下是一個基于TCP套接字的簡單網(wǎng)絡聊天室示例:服務器端代碼: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)建可以通過Thread類來實現(xiàn)。以下是一個創(chuàng)建線程的基本示例:ruthread=Thread.newdo線程執(zhí)行的代碼end在上述代碼中,Thread.new方法接收一個代碼塊,該代碼塊是線程需要執(zhí)行的代碼。當調(diào)用Thread.new時,Ru會創(chuàng)建一個新的線程,并在該線程中執(zhí)行傳入的代碼塊。9.1.2線程的管理Ru提供了多種方法用于管理線程,以下是一些常用的線程管理方法:`Threadjoin`:等待指定線程結束。調(diào)用此方法會阻塞當前線程,直到指定線程執(zhí)行完畢。`Threadabort_on_exception`:設置線程在遇到異常時是否終止。默認情況下,子線程在遇到異常時會終止,但主線程不會受到影響。`Threadexit`:主動終止當前線程的執(zhí)行。示例代碼:ruthread=Thread.newdo線程執(zhí)行的代碼end等待線程結束thread.join設置子線程遇到異常時不終止Thread.abort_on_exception=false9.2線程同步與通信9.2.1互斥鎖(Mutex)互斥鎖(Mutex)是一種同步機制,用于保證多個線程在訪問共享資源時不會產(chǎn)生沖突。在Ru中,可以通過Mutex類來實現(xiàn)互斥鎖。以下是一個使用互斥鎖的示例:rumutex=Mutex.newmutex.lock訪問共享資源的代碼mutex.unlock9.2.2條件變量(Condition)條件變量(Condition)用于在線程之間進行通信。當某個線程需要等待某個條件成立時,可以使用條件變量進行等待。以下是一個使用條件變量的示例:rucondition=Condition.newmutex=Mutex.newmutex.lock等待條件成立condition.wait(mutex)條件成立后執(zhí)行的代碼mutex.unlock9.2.3信號量(Semaphore)信號量(Semaphore)用于控制多個線程對共享資源的訪問。在Ru中,可以通過Semaphore類來實現(xiàn)信號量。以下是一個使用信號量的示例:rusemaphore=Semaphore.new(1)semaphore.synchronizedo訪問共享資源的代碼end9.3線程安全與并發(fā)9.3.1線程安全線程安全是指在多線程環(huán)境下,代碼塊在執(zhí)行時不會被其他線程干擾。為了保證線程安全,可以采取以下措施:使用互斥鎖(Mutex)保護共享資源。避免在多線程環(huán)境中使用全局變量。使用線程安全的數(shù)據(jù)結構,如Queue。9.3.2并發(fā)并發(fā)是指在多線程環(huán)境中,多個線程同時執(zhí)行。為了保證并發(fā)執(zhí)行的正確性,可以采取以下措施:合理分配線程資源,避免創(chuàng)建過多線程。使用線程池(ThreadPool)來管理線程。使用線程同步機制,如互斥鎖、條件變量和信號量。第十章Ru實踐項目10.1簡單計算器程序10.1.1項目概述本節(jié)將指導讀者利用Ru語言開發(fā)一個簡單的控制臺計算器程序。該程序能夠接收用戶輸入,并根據(jù)用戶選擇的操作執(zhí)行加、減、乘、除等基本數(shù)學運算。10.1.2設計思路程序首先展示一個菜單,引導用戶選擇操作類型。用戶輸入兩個數(shù)字和操作類型后,程序?qū)?zhí)行相應的數(shù)學運算,并輸出結果。10.1.3實現(xiàn)代碼以下是一個簡單計算器程序的基本實現(xiàn)代碼。rudefadd(x,y)xyenddefsubtract(x,y)xyenddefmultiply(x,y)xyenddefdivide(x,y)x.to_f/yendputs"簡單計算器"loopdoprint"請選擇操作[1]加[2]減[3]乘[4]除[5]退出:"operation=gets.to_ibreakifoperation==5print"請輸入第一個數(shù)字:"num1=gets.to_fprint"請輸入第二個數(shù)字:"num2=gets.to_fcaseoperationwhen1puts"結果是:{add(num1,num2)}"when2puts"結果是:{subtr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全員A證考試題庫練習備考題必考附答案詳解
- 安全員A證考試復習提分資料附參考答案詳解【綜合卷】
- 安全員A證考試練習題庫附完整答案詳解【奪冠系列】
- 特殊群體關愛幫扶方案
- 安全員A證考試能力檢測試卷附答案詳解(輕巧奪冠)
- 安全員A證考試強化訓練高能含完整答案詳解【典優(yōu)】
- 安全員A證考試強化訓練高能附答案詳解(突破訓練)
- 安全員A證考試模擬考試高能(滿分必刷)附答案詳解
- 小學英語口語訓練方案與素材
- 安全員A證考試能力測試B卷及參考答案詳解【綜合卷】
- 《砂漿、混凝土用低碳劑》
- 2025年社區(qū)工作總結及2026年工作計劃
- 南昌地鐵培訓課件
- GB/T 30104.104-2025數(shù)字可尋址照明接口第104部分:一般要求無線和其他有線系統(tǒng)組件
- 三年級上冊數(shù)學第三單元題型專項訓練-判斷題(解題策略專項秀場)人教版(含答案)
- GB/T 45629.1-2025信息技術數(shù)據(jù)中心設備和基礎設施第1部分:通用概念
- 2025年中考歷史開卷考查范圍重大考點全突破(完整版)
- 學術誠信與學術規(guī)范研究-深度研究
- 《ETF相關知識培訓》課件
- DB15-T 3677-2024 大興安嶺林區(qū)白樺樹汁采集技術規(guī)程
- 2024年《13464電腦動畫》自考復習題庫(含答案)
評論
0/150
提交評論