Rust包和Crate超詳細講解
包和crate
- 通過相關功能進行分組和劃分不同的功能代碼, 將代碼分割成多個模塊和多個文件組織代碼, 一個包包含 多個
crate
和一個可選的crate, Cargo 類似C++ 提供一個工作空間命名 類似JAVA中包空間。 - 避免重復造輪子, 其他代碼通過公關接口進行調用。
- 模塊系統: 包,Crates(模塊樹形結構,庫和二進制項目), 模塊, 路徑。
- *crate 是一個二進制項/ 庫, rust編譯以crate root源文件為起點,包中包含一個
Cargo.toml
描述如何構建crate.
$ cargo new my-project
Created binary (application) `my-project` package
$ ls my-project
Cargo.toml
src
$ ls my-project/src
main.rs
Cargo 遵循一個約定 src/main.rs是一個與包同名二進制crate的根,如果包中同時包含src/main.rs, src/lib.rs 表示擁有多個與包同名的crate, 每個src/bin 文件都會被編譯成獨立的庫
模塊控制作用域與私有性
模塊能夠將庫中代碼進行分組, 提供可讀性和重用性
use 引入外部依賴, pub公有關鍵字, as關鍵字 glob運算符。
// 一個包包含其他內置函數模塊的 front_of_house mod front_of_house { mod hosting { fn add_to_waitlist() {} fn seat_at_table() {} } mod serving { fn take_order() {} fn serve_order() {} fn take_payment() {} } } crate └── front_of_house ├── hosting │ ├── add_to_waitlist │ └── seat_at_table └── serving ├── take_order ├── serve_order └── take_payment
###模塊中路徑
- rust如何在一個模塊中找到一個項,路徑有兩種形式, 跟著一個
::
作為分割標識符 - 絕對路徑: 從crate根開始
- 相對路徑 : 以self, super
mod front_of_house { mod hosting { fn add_to_waitlist() {} } } pub fn eat_at_restaurant() { // 絕對路徑 crate::front_of_house::hosting::add_to_waitlist(); // 相對路徑 front_of_house::hosting::add_to_waitlist(); }
如上此代碼不能編譯 原因在于 hosting 在 mod的內部, 屬于私有的模塊 不能被外部調用 ,rust中默認所有項(函數、方法、結構體、枚舉、模塊和常量)都是私有的。
父模塊不能使用子模塊的所有項,但是子模塊可以,如果想要外部調用 必須的要增加 pub 關鍵字進行暴露
pub fn eat_at_restaurant() { // 絕對路徑 crate::front_of_house::hosting::add_to_waitlist(); // 相對路徑 front_of_house::hosting::add_to_waitlist(); }
use 進行模塊引入
mod front_of_house { pub mod hosting { pub fn add_to_waitlist() {} fn seat_at_table() {} } mod serving { fn take_order() {} fn serve_order() {} fn take_payment() {} } } use crate::front_of_house::hosting; use self::front_of_house::hosting; pub fn eat_at_restaurant() { hosting::add_to_waitlist(); }
解決將兩個同類型引入同一個作用域 導致rust編譯錯誤問題 使用as 關鍵字解決此等問題
use std::fmt::Result; use std::io::Result as IoResult;
pub use 能夠讓其他人導入他們自己的作用域
pub use crate::front_of_house::hosting
使用外部包的話需要Cargo.toml 下面增加
rand = "0.8.3"
到此這篇關于Rust包和Crate超詳細講解的文章就介紹到這了,更多相關Rust包和Crate內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Rust Atomics and Locks并發(fā)基礎理解
這篇文章主要為大家介紹了Rust Atomics and Locks并發(fā)基礎理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02