1. 程式人生 > 其它 >Rust學習——使用包、crate和模組管理不斷增長的專案

Rust學習——使用包、crate和模組管理不斷增長的專案

一、包和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。

可以使用巢狀路徑消除大量路徑相同部分。

若想引入所有項,則可以在指定路徑後使用*.(問題是會使得當前包下難以推導作用域中有什麼名稱以及何處定義)

五、模組分割

  1. 以分割模組命名檔案
  2. 通過mod 關鍵字引入模組
  3. 使用模組,可以使用use 關鍵字設定別名

檔案路徑即模組路徑,且命名一致。

學習是一條令人時而喜極若狂、時而鬱鬱寡歡的道路。