日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Rust包和Crate超詳細講解_Rust語言

作者:上后左愛 ? 更新時間: 2023-01-15 編程語言

包和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"

原文鏈接:https://blog.csdn.net/qq_27217017/article/details/123307706

欄目分類
最近更新