Rust包和Crate超詳細(xì)講解
包和crate
- 通過(guò)相關(guān)功能進(jìn)行分組和劃分不同的功能代碼, 將代碼分割成多個(gè)模塊和多個(gè)文件組織代碼, 一個(gè)包包含 多個(gè)
crate
和一個(gè)可選的crate, Cargo 類似C++ 提供一個(gè)工作空間命名 類似JAVA中包空間。 - 避免重復(fù)造輪子, 其他代碼通過(guò)公關(guān)接口進(jìn)行調(diào)用。
- 模塊系統(tǒng): 包,Crates(模塊樹(shù)形結(jié)構(gòu),庫(kù)和二進(jìn)制項(xiàng)目), 模塊, 路徑。
- *crate 是一個(gè)二進(jìn)制項(xiàng)/ 庫(kù), rust編譯以crate root源文件為起點(diǎn),包中包含一個(gè)
Cargo.toml
描述如何構(gòu)建crate.
$ cargo new my-project
Created binary (application) `my-project` package
$ ls my-project
Cargo.toml
src
$ ls my-project/src
main.rs
Cargo 遵循一個(gè)約定 src/main.rs是一個(gè)與包同名二進(jìn)制crate的根,如果包中同時(shí)包含src/main.rs, src/lib.rs 表示擁有多個(gè)與包同名的crate, 每個(gè)src/bin 文件都會(huì)被編譯成獨(dú)立的庫(kù)
模塊控制作用域與私有性
模塊能夠?qū)?kù)中代碼進(jìn)行分組, 提供可讀性和重用性
use 引入外部依賴, pub公有關(guān)鍵字, as關(guān)鍵字 glob運(yùn)算符。
// 一個(gè)包包含其他內(nèi)置函數(shù)模塊的 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如何在一個(gè)模塊中找到一個(gè)項(xiàng),路徑有兩種形式, 跟著一個(gè)
::
作為分割標(biāo)識(shí)符 - 絕對(duì)路徑: 從crate根開(kāi)始
- 相對(duì)路徑 : 以self, super
mod front_of_house { mod hosting { fn add_to_waitlist() {} } } pub fn eat_at_restaurant() { // 絕對(duì)路徑 crate::front_of_house::hosting::add_to_waitlist(); // 相對(duì)路徑 front_of_house::hosting::add_to_waitlist(); }
如上此代碼不能編譯 原因在于 hosting 在 mod的內(nèi)部, 屬于私有的模塊 不能被外部調(diào)用 ,rust中默認(rèn)所有項(xiàng)(函數(shù)、方法、結(jié)構(gòu)體、枚舉、模塊和常量)都是私有的。
父模塊不能使用子模塊的所有項(xiàng),但是子模塊可以,如果想要外部調(diào)用 必須的要增加 pub 關(guān)鍵字進(jìn)行暴露
pub fn eat_at_restaurant() { // 絕對(duì)路徑 crate::front_of_house::hosting::add_to_waitlist(); // 相對(duì)路徑 front_of_house::hosting::add_to_waitlist(); }
use 進(jìn)行模塊引入
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(); }
解決將兩個(gè)同類型引入同一個(gè)作用域 導(dǎo)致rust編譯錯(cuò)誤問(wèn)題 使用as 關(guān)鍵字解決此等問(wèn)題
use std::fmt::Result; use std::io::Result as IoResult;
pub use 能夠讓其他人導(dǎo)入他們自己的作用域
pub use crate::front_of_house::hosting
使用外部包的話需要Cargo.toml 下面增加
rand = "0.8.3"
到此這篇關(guān)于Rust包和Crate超詳細(xì)講解的文章就介紹到這了,更多相關(guān)Rust包和Crate內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用vscode配置Rust運(yùn)行環(huán)境全過(guò)程
VS Code對(duì)Rust有著較完備的支持,這篇文章主要給大家介紹了關(guān)于使用vscode配置Rust運(yùn)行環(huán)境的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06使用Rust語(yǔ)言編寫(xiě)一個(gè)ChatGPT桌面應(yīng)用示例詳解
這篇文章主要介紹了如何用Rust編寫(xiě)一個(gè)ChatGPT桌面應(yīng)用,文中有詳細(xì)的流程介紹,對(duì)大家的學(xué)習(xí)或工作有意一定的幫助,需要的朋友可以參考下2023-05-05Rust使用kind進(jìn)行異常處理(錯(cuò)誤的分類與傳遞)
Rust?有一套獨(dú)特的處理異常情況的機(jī)制,它并不像其它語(yǔ)言中的?try?機(jī)制那樣簡(jiǎn)單,這篇文章主要介紹了Rust指南錯(cuò)誤的分類與傳遞以及使用kind進(jìn)行異常處理,需要的朋友可以參考下2022-09-09在Rust中編寫(xiě)自定義Error的詳細(xì)代碼
Result<T, E> 類型可以方便地用于錯(cuò)誤傳導(dǎo),Result<T, E>是模板類型,實(shí)例化后可以是各種類型,但 Rust 要求傳導(dǎo)的 Result 中的 E 是相同類型的,所以我們需要編寫(xiě)自己的 Error 類型,本文給大家介紹了在Rust中編寫(xiě)自定義Error的詳細(xì)代碼,需要的朋友可以參考下2024-01-01Rust Atomics and Locks并發(fā)基礎(chǔ)理解
這篇文章主要為大家介紹了Rust Atomics and Locks并發(fā)基礎(chǔ)理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02