Rust學習——使用包、crate和模組管理不斷增長的專案
阿新 • • 發佈:2021-12-01
一、包和Crate
- 一個包至多隻能包含一個庫crate
- 包中可以包含任意多個二進位制crate
- 包中至少包含一個crate,不區分型別
src/main.rs就是一個與包同名的二進位制 crate 的 crate 根。
src/bin -> 二進位制crate
src/lib.rs -> 庫crate
src/main.rc -> 二進位制crate
二、定義模組,以控制作用域與私有性
使用 mod 關鍵字定義模組。
沿用家庭關係的比喻,如果一個模組 A 被包含在模組 B 中,我們將模組 A 稱為模組 B 的子(child),模組 B 則是模組 A 的父(parent)。
三、路徑,用於引用模組樹中的項
Rust 私有性邊界:不允許外部程式碼瞭解、呼叫和依賴被封裝的實現細節。
若希望建立一個私有函式或構造體,可以使用模組 mod。
Rust中預設所有項:函式、方法、結構體、列舉、模組和常量,都是私有的。
可以使用crate開頭實現絕對路徑使用模組。
也可以使用super開頭來構建從父模組開始的相對路徑。(類似於 ../ )方便在內嵌較深的函式下引用其他模組的函式。
四、use關鍵字,將名稱引入作用域
使用use關鍵字將模組下函式顯示宣告,後續即可直接使用該函式,無需加上一長串的字首。
應當建立慣用的use路徑,而不是具體的某個函式,這樣很不方便使用。
當使用use引入:結構體、列舉,習慣性指定他們完整的路徑。
如何使用use將兩個同名型別引入同一作用域?
在這個型別的路徑後面,使用as關鍵字指定一個新的本地名稱或者別名。
可以使用 pub + use 重匯出名稱。
標準庫(std)對於你的包來說也是外部crate。
可以使用巢狀路徑消除大量路徑相同部分。
若想引入所有項,則可以在指定路徑後使用*.(問題是會使得當前包下難以推導作用域中有什麼名稱以及何處定義)
五、模組分割
- 以分割模組命名檔案
- 通過mod 關鍵字引入模組
- 使用模組,可以使用use 關鍵字設定別名
檔案路徑即模組路徑,且命名一致。
學習是一條令人時而喜極若狂、時而鬱鬱寡歡的道路。