Rust - Moduły

Logiczna grupa kodu nazywana jest modułem. Wiele modułów jest kompilowanych w jednostkę o nazwiecrate. Programy Rust mogą zawierać skrzynkę binarną lub skrzynkę biblioteki. Skrzynka binarna to wykonywalny projekt, który ma metodę main () . Skrzynka biblioteki to grupa komponentów, które mogą być ponownie użyte w innych projektach. W przeciwieństwie do skrzynki binarnej, skrzynka biblioteki nie ma punktu wejścia (metoda main ()). Narzędzie Cargo służy do zarządzania skrzyniami w Rust. Na przykład, sieć Moduł zawiera funkcje związane z sieci i grafika Moduł zawiera funkcje związane Rysowanie. Moduły są podobne do przestrzeni nazw w innych językach programowania. Skrzynie innych firm można pobrać za pomocą ładunku ze strony crates.io .

Sr.No Termin i opis
1

crate

Jest jednostką kompilacyjną w Rust; Skrzynka jest kompilowana do postaci binarnej lub bibliotecznej.

2

cargo

Oficjalne narzędzie do zarządzania pakietami Rusta dla skrzynek.

3

module

Logicznie grupuje kod w skrzynce.

4

crates.io

Oficjalny rejestr pakietów Rusta.

Składnia

//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() {
   }
}

Moduły mogą być publiczne lub prywatne. Inne moduły nie mają dostępu do komponentów w module prywatnym. Moduły w Rust są domyślnie prywatne. Wręcz przeciwnie, funkcje w module publicznym mogą być dostępne z innych modułów. Moduły powinny być poprzedzonepubsłowo kluczowe, aby je upublicznić. Funkcje w module publicznym również muszą zostać upublicznione.

Ilustracja: Definiowanie modułu

Przykład definiuje moduł publiczny - filmy . Moduł zawiera funkcję play (), która przyjmuje parametr i wyświetla jego wartość.

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

Wynik

Playing movie Herold and Kumar

Użyj słowa kluczowego

Użycie słów kluczowych ułatwia importowanie modułu publicznego.

Składnia

use public_module_name::function_name;

Ilustracja

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

Wynik

Playing movie Herold and Kumar

Zagnieżdżone moduły

Moduły można również zagnieżdżać. Komedia moduł jest zagnieżdżony w angielskiej modułu, który jest dodatkowo zagnieżdżony w filmy modułu. Poniższy przykład definiuje funkcję odtwarzania w module 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; 
// 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());
}

Wynik

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

Ilustracja - Utwórz skrzynkę biblioteki i skonsumuj w skrzynce binarnej

Stwórzmy skrzynkę biblioteki o nazwie movie_lib, który zawiera moduł movies. Aby zbudowaćmovie_lib skrzynki biblioteki, użyjemy narzędzia cargo.

Krok 1 - Utwórz folder projektu

Utwórz folder movie-app, a następnie podfolder movie-lib . Po utworzeniu folderu i podfolderu utwórz pliksrcfolder i plik Cargo.toml w tym katalogu. Kod źródłowy powinien trafić do folderu src . Utwórz pliki lib.rs i movies.rs w folderze src. Plik Cargo.toml będzie zawierał metadane projektu, takie jak numer wersji, nazwisko autora itp.

Struktura katalogu projektu będzie taka, jak pokazano poniżej -

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

Krok 2 - Edytuj plik Cargo.toml, aby dodać metadane projektu

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

Krok 3 - Edytuj plik lib.rs.

Dodaj następującą definicję modułu do tego pliku.

pub mod movies;

Powyższa linia tworzy moduł publiczny - movies.

Krok 4 - Edytuj plik movies.rs

Ten plik definiuje wszystkie funkcje modułu filmów.

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

Powyższy kod definiuje funkcję play() który akceptuje parametr i wyświetla go na konsoli.

Krok 5 - Zbuduj skrzynię biblioteki

Utwórz aplikację przy użyciu cargo buildpolecenie, aby sprawdzić, czy skrzynka biblioteki ma poprawną strukturę. Upewnij się, że jesteś w katalogu głównym projektu - w folderze aplikacji filmowej. Następująca wiadomość zostanie wyświetlona w terminalu, jeśli kompilacja się powiedzie.

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

Krok 6 - Utwórz aplikację testową

Utwórz inny folder movie-lib-testw folderze movie-app, po którym następuje plik Cargo.toml i folder src. Ten projekt powinien mieć metodę główną, ponieważ jest to skrzynka binarna, która zużyje utworzoną wcześniej skrzynkę biblioteki. Utwórz plik main.rs w folderze src. Struktura folderów będzie taka, jak pokazano.

movie-app
   movie-lib 
   // already completed

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

Krok 7 - Dodaj następujące elementy w pliku Cargo.toml

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

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

NOTE- Ścieżka do folderu biblioteki jest ustawiona jako zależności. Poniższy diagram przedstawia zawartość obu projektów.

Krok 8 - Dodaj następujący plik do pliku main.rs

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

Powyższy kod importuje zewnętrzny pakiet o nazwie movies_lib. Sprawdź Cargo.toml bieżącego projektu, aby zweryfikować nazwę skrzyni.

Krok 9 - Korzystanie z kompilacji ładunku i przebiegu ładunku

Użyjemy kompilacji ładunku i przebiegu ładunku, aby zbudować projekt binarny i wykonać go, jak pokazano poniżej -