Учебники

Rust — Модули

Логическая группа кода называется модулем. Несколько модулей скомпилированы в единицу, называемую crate . Программы Rust могут содержать бинарный ящик или библиотечный ящик. Бинарный ящик — это исполняемый проект с методом main () . Ящик библиотеки — это группа компонентов, которые можно использовать в других проектах. В отличие от бинарного ящика, у библиотечного ящика нет точки входа (метод main ()). Инструмент Cargo используется для управления ящиками в Rust. Например, сетевой модуль содержит функции, связанные с сетью, а графический модуль содержит функции, связанные с рисованием. Модули похожи на пространства имен в других языках программирования. Ящики сторонних производителей можно загрузить с помощью груза с сайта crates.io .

Sr.No Срок и описание
1

клеть

Является ли блок компиляции в Rust; Ящик компилируется в двоичный файл или библиотеку.

2

грузовой

Официальный инструмент управления пакетами Rust для ящиков.

3

модуль

Логически группирует код внутри ящика.

4

crates.io

Официальный реестр пакетов Rust.

клеть

Является ли блок компиляции в Rust; Ящик компилируется в двоичный файл или библиотеку.

грузовой

Официальный инструмент управления пакетами Rust для ящиков.

модуль

Логически группирует код внутри ящика.

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 помогает импортировать публичный модуль.

Синтаксис

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

Вложенные модули

Модули также могут быть вложенными. Комедийный модуль вложен в английский модуль, который далее вложен в модуль фильмов . Пример, приведенный ниже, определяет функцию воспроизведения внутри модуля 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());
}

Выход

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

Иллюстрация — Создайте библиотечный ящик и используйте его в двоичном ящике

Давайте создадим библиотечный ящик с именем movie_lib , который содержит модуль кино . Для создания ящика библиотеки movie_lib мы будем использовать инструмент Cargo .

Шаг 1 — Создать папку проекта

Создайте папку movie-app, а затем подпапку movie-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;

Вышеуказанная строка создает публичный модуль — фильмы .

Шаг 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, так как это двоичный ящик, который будет использовать созданный ранее ящик библиотеки. Создайте файл 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" }

ПРИМЕЧАНИЕ. — Путь к папке библиотеки устанавливается как зависимости. Следующая диаграмма показывает содержание обоих проектов.

Грузовой Томль Файл

Шаг 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 — Использование грузовой сборки и грузовой пробег

Мы будем использовать сборку грузов и запуск грузов, чтобы построить бинарный проект и выполнить его, как показано ниже —

грузовой пробег