學習新時代編程語言Rust-14一箱褲子

上一期我們學習使用了引用和可變引用,有個點還需要大家注意下:可變引用是用來標示引用具有修改數據的權限的,但數據能不能修改還要看當前變量是不是可以修改的,這就像小胖找媽媽修改褲子長度,小胖首先要確保褲子本身是可以修改的,再給媽媽分配修改褲子的權限纔有意義。這也是我們在聲明xiaopang_trousers時爲什麼要使用mut的原因。有同學復現課程中代碼時忘記敲這裏的mut關鍵字了,一直運行不成功,所以我們在這裏說下,如果你在復現課程代碼時遇到什麼問題也歡迎給我們聯繫我們會及時答覆。
mut
接下來繼續我們的故事,話說上次小胖是買了一條褲子,這次小胖買了一箱褲子。新同事想看,小胖只想讓他看其中的幾條,並不想把所有的褲子都給他看。胖子買褲子啊一般都會長,這次也不例外,但這次褲子比較多所以小胖找女朋友和媽媽分別改一部分褲子。用代碼該怎麼實現呢?!
  我們先刪除掉不需要的代碼,再定義一個數組,數組裏面放着小胖子的褲子,用這個數組表示小胖的一箱褲子。褲子比較多,我們加個編號區分。如果我們直接傳遞一個xiaopang_box_trousers的引用是不是新同事就看到所有的褲子了?那怎麼辦呢?
xiaopang_box_trousers
  我們可以在xiaopang_box_trousers引用後使用中括號只獲取數組一部分元素。也就是隻給新同事看一部分褲子的憑證。這裏我們使用1…3給新同事看第2條和第3條褲子。這裏的1代表選取數組元素的起始索引,我們知道數組的索引是從0開始的,所以0代表數組中的第一個元素,這裏的1也就代表數組中的第2個元素也就是第2條褲子。這裏的3代表選取數組元素的結束索引,跟啓始索引不一樣的是,選取結果中並不包含結束索引。這裏的1和3就組成了一個從1到3的前開後閉區間,也就是選取了從第一條到第3條褲子,但是不包括第3條褲子。另外這裏的起始索引和結束索引都可以不指定。如果不指定起始索引代表從第一個元素開始取,如果不指定結束索引代表從啓始索引開始的所有元素。
  這樣只取數組一部分元素引用的操作,稱爲切片。這個名字比較形象是吧,一個蛋糕吃不完,可以切一部分。
  接下來我們修改下新同事看褲子的函數,原來是接受一個String類型的引用,現在一次要看多條褲子,索引要改成一個String類型的切片。
String slice
  這裏使用for循環遍歷切片裏的元素,也就是把切片裏的褲子一個一個的看完。
修改好後,保存退出使用cargo run 運行下代碼。
cargo run
  從控制檯輸出的信息可以看出,新同事只看到了第2條和第3條褲子,跟我們的故事情節相吻合。接下來我們實現下小胖找女朋友和媽媽修改褲子長度的代碼。
  我們修改下女朋友修改褲子的函數,跟新同事看褲子的函數類似需要將參數類型換成String類型的可變切片。在女朋友修改褲子的函數中遍歷褲子切片時需要iter mut方法生成一個可變類型的迭代器,這樣我們遍歷出的褲子纔是一個可變類型的引用。
iter_mut
  我們再修改下媽媽修改褲子的函數。
  修改調用函數時傳遞的參數,女朋友修改從第1條褲子到第3條褲子,起始值省略即代表從第一條開始,當然你也可以寫個0在這裏。媽媽修改剩下的褲子,這裏結束索引值也可以省略。
slice
  修改好後保存,運行看下效果。
cargo run
我們可以在控制檯看到女朋友修改了第1條第2條和第3條褲子,媽媽修改了剩下的第4條和第5條褲子。
這一期我們學習了切片slice,用於只獲取數組,集合元素的一部分元素引用。切片跟普通的引用一樣也可以聲明爲可修改的。
   另外需要向大家介紹一個特殊的切片類型 &str. 我們可以把String類型看成是由字符類型組合而成的集合類型。
collection
因此我們也可以使用切片語法獲取String的一部分元素。&str類型就可以看做String的不可變切片。當我們使用字符串字面量也就是直接在代碼中寫入一串文字給一個變量賦值時,這個變量的類型也是&str類型,在&號後沒有mut關鍵字所以這樣聲明的字符串是不可變的。這也是爲什麼我們這裏要使用String::from方法創建字符串而不是直接使用字面量。因爲我們的褲子需要修改長度需要變動,而使用字符串字面量創建的&str類型的字符串是不可變的。
String from
   大家可以嘗試下使用字符串字面量做褲子。

內容根據視頻整理,相應視頻內容可訪問

51cto學院:
51cto

免費進羣交流

KeepLearning

More you focus on helping others succeed. the more you succeed.