Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpMdPh 61 of 288 menu
◀ ▶

Пути к имени в модуле в Rust

Полное имя функции или типа складывают из частей через два двоеточия. Так видно, в каком блоке живет значение и как к нему дойти из другого места файла или крейта.

Из любого файла крейта можно обратиться к открытой функции, начиная путь со слова crate:

mod greet { pub fn hello() -> String { String::from("hi") } } mod app { pub fn run() -> String { crate::greet::hello() } } fn main() { let text = app::run(); println!("{}", text); }

Запись crate::greet::hello читается от корня текущего крейта: сначала блок greet, затем функция hello. Внутри вложенного блока часто пишут super::, чтобы подняться на один уровень к родителю.

Вложенный блок обращается к функции родителя через super:::

mod greet { pub fn hello() -> String { String::from("hi") } mod inner { pub fn call() -> String { super::hello() } } } fn main() { let text = greet::inner::call(); println!("{}", text); }

Даны блоки:

mod base { pub fn id() -> i32 { 1 } } mod wrap { pub fn pick() -> i32 { crate::base::id() } }

Допишите точку входа, которая выводит результат wrap::pick.

Дан вложенный блок:

mod outer { pub fn label() -> &'static str { "out" } mod inner { pub fn via_super() -> &'static str { super::label() } } }

Напишите, какой путь стоит внутри via_super и зачем здесь нужен родитель, а не crate::.

Дана точка входа с обращением crate::math::twice. Опишите, где в проекте должны лежать блок math и функция twice.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить