สนิม - โมดูล

กลุ่มของรหัสตรรกะเรียกว่าโมดูล หลายโมดูลถูกรวบรวมเป็นหน่วยที่เรียกว่าcrate. โปรแกรมสนิมอาจมีลังไบนารีหรือลังห้องสมุด ลังไบนารีเป็นโปรเจ็กต์ปฏิบัติการที่มีเมธอดmain () ลังไลบรารีคือกลุ่มของส่วนประกอบที่สามารถนำกลับมาใช้ในโครงการอื่นได้ ซึ่งแตกต่างจากลังไบนารีลังไลบรารีไม่มีจุดเข้าใช้งาน (main () วิธีการ) เครื่องมือขนส่งสินค้าใช้ในการจัดการลังใน Rust ตัวอย่างเช่นโมดูลเครือข่ายประกอบด้วยฟังก์ชันที่เกี่ยวข้องกับระบบเครือข่ายและโมดูลกราฟิกมีฟังก์ชันที่เกี่ยวข้องกับการวาดภาพ โมดูลคล้ายกับเนมสเปซในภาษาโปรแกรมอื่น ๆ ลังของบุคคลที่สามสามารถดาวน์โหลดได้โดยใช้การขนส่งสินค้าจากcrates.io

ซีเนียร์ No ข้อกำหนดและคำอธิบาย
1

crate

เป็นหน่วยคอมไพล์ใน Rust; Crate ถูกรวบรวมเป็นไบนารีหรือไลบรารี

2

cargo

เครื่องมือจัดการแพคเกจ Rust อย่างเป็นทางการสำหรับลัง

3

module

จัดกลุ่มโค้ดอย่างมีเหตุผลภายในลัง

4

crates.io

การลงทะเบียนแพ็คเกจ Rust อย่างเป็นทางการ

ไวยากรณ์

//public module
pub mod a_public_module {
   pub fn a_public_function() {
      //public function
   }
   fn a_private_function() {
      //private function
   }
}
//private module
mod a_private_module {
   fn a_private_function() {
   }
}

โมดูลสามารถเป็นแบบสาธารณะหรือส่วนตัว ส่วนประกอบในโมดูลส่วนตัวไม่สามารถเข้าถึงได้โดยโมดูลอื่น โมดูลใน Rust เป็นแบบส่วนตัวโดยค่าเริ่มต้น ในทางตรงกันข้ามโมดูลอื่น ๆ สามารถเข้าถึงฟังก์ชันในโมดูลสาธารณะได้ โมดูลควรขึ้นต้นด้วยpubคีย์เวิร์ดเพื่อเผยแพร่สู่สาธารณะ ฟังก์ชันภายในโมดูลสาธารณะต้องเปิดเผยต่อสาธารณะด้วย

ภาพประกอบ: การกำหนดโมดูล

ตัวอย่างที่กำหนดโมดูลสาธารณะ - ภาพยนตร์ โมดูลมีฟังก์ชันplay ()ที่ยอมรับพารามิเตอร์และพิมพ์ค่า

pub mod movies {
   pub fn play(name:String) {
      println!("Playing movie {}",name);
   }
}
fn main(){
   movies::play("Herold and Kumar".to_string());
}

เอาต์พุต

Playing movie Herold and Kumar

ใช้คำหลัก

ใช้คำหลักที่จะช่วยให้นำเข้าโมดูลสาธารณะ

ไวยากรณ์

use public_module_name::function_name;

ภาพประกอบ

pub mod movies {
   pub fn play(name:String) {
      println!("Playing movie {}",name);
   }
}
use movies::play;
fn main(){
   play("Herold and Kumar ".to_string());
}

เอาต์พุต

Playing movie Herold and Kumar

โมดูลที่ซ้อนกัน

โมดูลสามารถซ้อนกันได้ ตลกโมดูลซ้อนในภาษาอังกฤษโมดูลซึ่งจะซ้อนกันต่อไปในภาพยนตร์โมดูล ตัวอย่างที่ให้ไว้ด้านล่างกำหนดการเล่นฟังก์ชันภายในโมดูลภาพยนตร์ / ภาษาอังกฤษ / ตลก

pub mod movies {
   pub mod english {
      pub mod comedy {
         pub fn play(name:String) {
            println!("Playing comedy movie {}",name);
         }
      }
   }
}
use movies::english::comedy::play; 
// importing a public module

fn main() {
   // short path syntax
   play("Herold and Kumar".to_string());
   play("The Hangover".to_string());

   //full path syntax
   movies::english::comedy::play("Airplane!".to_string());
}

เอาต์พุต

Playing comedy movie Herold and Kumar
Playing comedy movie The Hangover
Playing comedy movie Airplane!

ภาพประกอบ - สร้างกล่องห้องสมุดและบริโภคในลังไบนารี

ให้เราสร้างลังห้องสมุดชื่อ movie_libซึ่งมีโมดูล movies. เพื่อสร้างไฟล์movie_lib ลังห้องสมุดเราจะใช้เครื่องมือ cargo.

ขั้นตอนที่ 1 - สร้างโฟลเดอร์โครงการ

สร้างโฟลเดอร์ภาพยนตร์แอปตามโฟลเดอร์ย่อยภาพยนตร์ lib หลังจากสร้างโฟลเดอร์และโฟลเดอร์ย่อยแล้วให้สร้างไฟล์srcโฟลเดอร์และไฟล์ Cargo.toml ในไดเร็กทอรีนี้ รหัสที่มาควรจะไปในโฟลเดอร์ src สร้างไฟล์ lib.rs และ movies.rs ในโฟลเดอร์ src Cargo.tomlไฟล์จะประกอบด้วยข้อมูลเมตาของโครงการเช่นหมายเลขรุ่นชื่อผู้เขียน ฯลฯ

โครงสร้างไดเรกทอรีโครงการจะเป็นดังที่แสดงด้านล่าง -

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

ขั้นตอนที่ 2 - แก้ไขไฟล์ Cargo.toml เพื่อเพิ่มข้อมูลเมตาของโครงการ

[package]
name = "movies_lib"
version = "0.1.0"
authors = ["Mohtashim"]

ขั้นตอนที่ 3 - แก้ไขไฟล์ lib.rs

เพิ่มนิยามโมดูลต่อไปนี้ให้กับไฟล์นี้

pub mod movies;

บรรทัดด้านบนสร้างโมดูลสาธารณะ - movies.

ขั้นตอนที่ 4 - แก้ไขไฟล์ movies.rs

ไฟล์นี้จะกำหนดฟังก์ชันทั้งหมดสำหรับโมดูลภาพยนตร์

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

โค้ดด้านบนกำหนดฟังก์ชัน play() ที่ยอมรับพารามิเตอร์และพิมพ์ไปยังคอนโซล

ขั้นตอนที่ 5 - สร้างลังห้องสมุด

สร้างแอปโดยใช้ไฟล์ cargo buildคำสั่งเพื่อตรวจสอบว่าลังไลบรารีมีโครงสร้างอย่างถูกต้องหรือไม่ ตรวจสอบให้แน่ใจว่าคุณอยู่ที่รากของโปรเจ็กต์ - โฟลเดอร์แอพภาพยนตร์ ข้อความต่อไปนี้จะแสดงในเทอร์มินัลหากการสร้างสำเร็จ

D:\Rust\movie-lib> cargo build
   Compiling movies_lib v0.1.0 (file:///D:/Rust/movie-lib)
   Finished dev [unoptimized + debuginfo] target(s) in 0.67s

ขั้นตอนที่ 6 - สร้างแอปพลิเคชันทดสอบ

สร้างโฟลเดอร์อื่น movie-lib-testในโฟลเดอร์ movie-app ตามด้วยไฟล์ Cargo.toml และโฟลเดอร์ src โครงการนี้ควรมีวิธีการหลักเนื่องจากเป็นลังไบนารีซึ่งจะใช้ลังไลบรารีที่สร้างขึ้นก่อนหน้านี้ สร้างไฟล์ main.rs ในโฟลเดอร์ src โครงสร้างโฟลเดอร์จะเป็นดังรูป

movie-app
   movie-lib 
   // already completed

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

ขั้นตอนที่ 7 - เพิ่มสิ่งต่อไปนี้ในไฟล์ Cargo.toml

[package]
name = "test_for_movie_lib"
version = "0.1.0"
authors = ["Mohtashim"]

[dependencies]
movies_lib = { path = "../movie-lib" }

NOTE- เส้นทางไปยังโฟลเดอร์ไลบรารีถูกตั้งค่าเป็นการอ้างอิง แผนภาพต่อไปนี้แสดงเนื้อหาของทั้งสองโครงการ

ขั้นตอนที่ 8 - เพิ่มสิ่งต่อไปนี้ในไฟล์ main.rs

extern crate movies_lib;
use movies_lib::movies::play;
fn main() {
   println!("inside main of test ");
   play("Tutorialspoint".to_string())
}

โค้ดด้านบนนำเข้าแพ็กเกจภายนอกที่เรียกว่า movies_lib ตรวจสอบ Cargo.toml ของโครงการปัจจุบันเพื่อตรวจสอบชื่อลัง

ขั้นตอนที่ 9 - การใช้งานการสร้างสินค้าและการขนส่งสินค้า

เราจะใช้การสร้างสินค้าและการขนส่งสินค้าเพื่อสร้างโครงการไบนารีและดำเนินการดังที่แสดงด้านล่าง -