上一期學習復合數(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)絡環(huán)境可能會比較慢愿险,我們可以配置下 Cargo 讓它使用國內(nèi)的 carte 庫,這里我們使用的是中科大的 crate 庫蟆淀,相關的配置信息:
當前用戶文件夾/.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ù)組的索引對應起來還需要減 1兵迅,按照需要我們在控制臺輸出“現(xiàn)在是”抢韭,月份的中文名我們可以用索引去數(shù)組中提取。
編寫好后恍箭,保存退出刻恭,執(zhí)行 cargo run 編譯并執(zhí)行。
很幸運我們遇到了個錯誤
? ? ? ? ? 這個錯誤信息告訴我們扯夭,數(shù)組的索引需要是 usize 類型而我們現(xiàn)在用的索引是 u32 類型鳍贾,所以我們需要做下類型轉換,在 Rust 中使用 as 做基本數(shù)據(jù)類型間的轉換交洗。
修改好后保存退出骑科,再次執(zhí)行 cargo run,
這次就輸出了現(xiàn)在是八月
我們的練習就完成了构拳。大家可以想下咆爽,如果我們的程序使用 if 實現(xiàn)得需要多少行代碼,現(xiàn)在是 5 行代碼置森,如果用 if 實現(xiàn)得 20 多行吧斗埂?
大家在完成練習的時候如果遇到問題也盡量按照我們的代碼照著寫把它運行起來,就像練字一樣暇藏,可以先做臨摹蜜笤。