1. 程式人生 > 其它 >rust為什麼顯示不了國服_Rust 學習筆記-15 模組化

rust為什麼顯示不了國服_Rust 學習筆記-15 模組化

技術標籤:rust為什麼顯示不了國服

邏輯程式碼組成為模組。

多個模組被編譯成一個稱為 crate 的單元。

概念

  • crate
  • Cargo
  • module
  • crates.io

crate:

  • Rust程式可能包含一個二進位制 crate 或一個庫 crate 。
  • 二進位制 crate 是一個具有 main()方法的可執行檔案。
  • 庫 crate 是一組可以在其他專案中重用的元件。與二進位制 crate 不同,庫crate 沒有入口點(main() 方法)。

cargo:

  • Cargo工具是用來管理Rust 的crates 。

module:

  • 在一個crate中對程式碼進行邏輯分組
  • 例如,網路模組包含網路相關功能,圖形模組包含與繪圖相關的功能。模組類似於其他程式語言中的名稱空間。

crates.io:

  • 官方Rust 包(crate)倉庫.
  • 第三方crates可從crates.io 下載獲取。

模組語法:

// 公開的模組pub mod a_public_module {   pub fn a_public_function() {      // 公開的方法.   }   fn a_private_function() {      // 私有方法.   }}//私有模組mod a_private_module {   fn a_private_function() {   }}

模組可以是公有的或私有的。其他模組無法訪問私有模組中的元件。Rust中的模組預設是私有的。相反,公有模組中的函式可以被其他模組訪問。模組應該以 pub關鍵字作為字首使其變成公有的。公有模組中的函式也必須公開。

定義一個模組

該示例定義了一個公共模組−movies。該模組包含一個函式play(),該函式接受引數並列印其值.

pub mod movies {   pub fn play(name:String) {      println!("Playing movie {}",name);   }}fn main(){   movies::play("天龍八部".to_string());}

輸出結果:

Playing movie 天龍八部

Use 關鍵詞

use關鍵字用來匯入公共模組。

語法:

use public_module_name::function_name;

例如:

pub mod movies {   pub fn play(name:String) {      println!("Playing movie {}",name);   }}use movies::play;fn main(){   play("天龍八部 ".to_string());}

輸出:

Playing movie 天龍八部

巢狀模組

模組也可以巢狀。comedy 模組巢狀在 english 模組中,後者進一步巢狀在 movies模組中。

下面給出的示例定義了movies/english/comedy模組中的函式播放

pub mod movies {   pub mod english {      pub mod comedy {         pub fn play(name:String) {            println!("Playing comedy movie {}",name);         }      }   }}use movies::english::comedy::play; // 匯入一個公共模組.fn main() {   // short path syntax   play("天龍八部".to_string());   play("戰狼".to_string());   //full path syntax   movies::english::comedy::play("飛上雲霄".to_string());}

輸出結果:

Playing comedy movie 天龍八部Playing comedy movie 戰狼Playing comedy movie 飛上雲霄

建立一個庫crate 並在二進位制crate 中使用

讓我們建立一個名為movie_lib的庫,其中包含一個movies模組.

第一步: 建立應用.

建立目錄movie-app

D:demoustmovie-app>cargo new movie-lib --lib     Created library `movie-lib` packageD:demoustmovie-app>

目錄結構是這樣的.

movie-app   movie-lib/      -->Cargo.toml      -->src/                lib.rs                movies.rs

第二步: 編輯Cargo.toml 編輯專案元資料.

[package]name = "movie-lib"version = "0.1.0"authors = ["aron9g "]edition = "2018"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies]

第三步: 編輯 lib.rs 檔案.

新增以下行到檔案lib.rs

pub mod movies;

以上指令建立了一個公共模組: movies

第四步: 編輯movies.rs 檔案

pub fn play(name:String){   println!("Playing movie {} :movies-app",name);}

上面的程式碼定義了一個函式play(),它接受一個引數並將其列印到控制檯

第五步: 構建庫 crate.

使用cargo build命令構建應用程式,以驗證庫crate的結構是否正確。確保您位於專案的根目錄-電影應用程式資料夾。如果構建成功,終端將顯示以下訊息:

D:demoustmovie-appmovie-lib>cargo build   Compiling movie-lib v0.1.0 (D:demoustmovie-appmovie-lib)    Finished dev [unoptimized + debuginfo] target(s) in 0.26s

第六步: 建立一個測試程式

在movie app資料夾後建立另一個資料夾movie-lib-test , Cargo.toml檔案和src資料夾。這個專案應該有main方法,因為這是一個二進位制crate,

D:demoustmovie-app>cargo new movie-lib-test --bin     Created binary (application) `movie-lib-test` package

資料夾結構如圖所示:

movie-app   movie-lib    // already completed   movie-lib-test/      -->Cargo.toml      -->src/         main.rs

第七步: 新增依賴. 編輯Cargo.toml

在movie-lib-test 專案的cargo.toml檔案下.

[package]name = "movie-lib-test"version = "0.1.0"authors = ["aron9g "]edition = "2018"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies]movie_lib = { path = "../movie-lib" }

庫資料夾的路徑設定為依賴項。下圖顯示了這兩個專案的內容

a618488bbd4c1251bddf3e55ee09366f.png

第八步: 編輯main.rs

extern crate movie_lib;use movie_lib::movies::play;fn main() {   println!("inside main of test ");   play("星球大戰".to_string())}

第九步: 構建並執行:

cargo run

輸出結果:

D:demoustmovie-appmovie-lib-test>cargo run    Finished dev [unoptimized + debuginfo] target(s) in 0.01s     Running `targetdebugmovie-lib-test.exe`inside main of testPlaying movie 星球大戰 :movies-app
a21a8313542e6a6883880f27cf3add2a.png

往期回顧:

今天不知怎麼發不了往期文章連結,檢視往期,點我頭像.