上一期學習復合數(shù)據(jù)類型時我們留了一個練習題: 獲取當前的月份,如果是 1 月就輸出“現(xiàn)在是一月 ”,如果是 2 月就輸出”現(xiàn)在是二月,依次類推。我們一起做一下,首先使用?
cargo new compound-data-type-exercise?
創(chuàng)建一個 Rust 項目,進入項目文件夾,用文本編輯器打開 main.rs 文件。需要輸出月份,我們首先需要定義一個數(shù)組存儲所有月份的中文名

? ? ? ? ?編寫代碼時要注意這里的符號都是英文狀態(tài)的,所以我們需要中文英文輸入法來回的切換。
接下來我們需要獲取當前的月份,這里需要使用一個第三方庫:chrono,一個支持日期和時間操作的 Rust 庫,在項目中使用第三方庫時需要配置Cargo.toml 文件,在 dependencise 區(qū)域配置依賴庫版本信息

使用第三方庫我們還需要在文件的頭部使用 extern引入庫,我們還需要使用 use 導入包,這樣我們使用 chrono 包里的對象方法時就不需要帶 chrono 前綴了,配置好后就可以使用 chrono 提供的 Local 獲取今天的日期并使用 month 方法獲取當前的月份。

? ? ? ? ?我們先把當前的月份輸出到控制臺看一下,保存退出,執(zhí)行 cargo run 編譯執(zhí)行,這個時候 cargo 開始根據(jù)我們在 Cargo.toml 文件里配置的依賴信息下載第三方庫,在 Rust 中庫叫 crate,默認情況下這些庫需要通過 Rust 的官方倉庫下載,由于國內(nèi)的網(wǎng)絡(luò)環(huán)境可能會比較慢,我們可以配置下 Cargo 讓它使用國內(nèi)的 carte 庫,這里我們使用的是中科大的 crate 庫,相關(guān)的配置信息:
當前用戶文件夾/.cargo/config
[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
replace-with = 'ustc'
[source.ustc]
registry = "https://mirrors.ustc.edu.cn/crates.io-index"
? ? ? ? ?國內(nèi)有很多公司提供這樣的倉庫類似的還有 Docker 的鏡像倉庫、Maven 的倉庫,這為我們開發(fā)人員節(jié)約了很多下載時間。配置好后我們再重新執(zhí)行下 cargo run,這次執(zhí)行的就比較快了,可以在控制臺看到輸出了當前月份 ,我們已經(jīng)可以獲取到當前的月份了。但是月份是從 1 月開始的,而我們的數(shù)組的索引是從 0 開始的,所以我們要把當前的月份跟數(shù)組的索引對應(yīng)起來還需要減 1,按照需要我們在控制臺輸出“現(xiàn)在是”,月份的中文名我們可以用索引去數(shù)組中提取。

編寫好后,保存退出,執(zhí)行 cargo run 編譯并執(zhí)行。
很幸運我們遇到了個錯誤

? ? ? ? ? 這個錯誤信息告訴我們,數(shù)組的索引需要是 usize 類型而我們現(xiàn)在用的索引是 u32 類型,所以我們需要做下類型轉(zhuǎn)換,在 Rust 中使用 as 做基本數(shù)據(jù)類型間的轉(zhuǎn)換。

修改好后保存退出,再次執(zhí)行 cargo run,
這次就輸出了現(xiàn)在是八月

我們的練習就完成了。大家可以想下,如果我們的程序使用 if 實現(xiàn)得需要多少行代碼,現(xiàn)在是 5 行代碼,如果用 if 實現(xiàn)得 20 多行吧?
大家在完成練習的時候如果遇到問題也盡量按照我們的代碼照著寫把它運行起來,就像練字一樣,可以先做臨摹。