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 -