Создание библиотечного крейта
Последовательность шагов
- Создать проект
cargo new restaurant --lib
- Вставить код в файл
src/lib.rs
#![allow(unused)] fn main() { mod front_of_house { mod hosting { fn add_to_waitlist() {} fn seat_at_table() {} } mod serving { fn take_order() {} fn serve_order() {} fn take_payment() {} } } }
- Дерево модулей

- Пути к элементам модулей
- абсолютный путь начинается с имени крейта
- абсолютный путь из текущего крейта начинается с
crate - относительный путь начинается с текущего модуля
selfиsuperили идентификатор
#![allow(unused)] fn main() { pub fn eat_at_restaurant() { // Absolute path crate::front_of_house::hosting::add_to_waitlist(); // Relative path front_of_house::hosting::add_to_waitlist(); } }
В Rust все элементы (функции, методы, структуры, перечисления, модули и константы) по умолчанию являются приватными для родительских модулей.
Элементы в родительском модуле не могут использовать приватные элементы внутри дочерних модулей, но элементы в дочерних модулях могут использовать элементы у своих модулях-предках.
- Добавим ключевое слово
pubдля модуля и функции, чтобы предоставить публичный доступ
Ключевое слово super
можно построить относительные пути, которые начинаются в родительском модуле, используя ключевое слово super в начале пути.
Использование super позволяет нам сослаться на элемент, который находится в родительском модуле.
#![allow(unused)] fn main() { fn deliver_order() {} mod back_of_house { fn fix_incorrect_order() { cook_order(); super::deliver_order(); } fn cook_order() {} } }