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

Видимость в модуле в Rust

По умолчанию функция или тип видны только внутри того блока, где их объявили. Чтобы другой участок программы мог обратиться к имени, его открывают специальной пометкой перед объявлением.

Попробуем вызвать функцию без пометки из точки входа:

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

Такой файл не собирается: точка входа лежит снаружи блока greet, а имя hello для нее закрыто. Сообщение компилятора укажет, что функция приватна для этого модуля.

Достаточно открыть имя наружу блока:

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

Пометка pub делает имя доступным снаружи модуля. Есть и более узкая запись pub(crate): имя видно в любом файле этого крейта, но не в чужом крейте, который подключат как зависимость.

Дан следующий код:

mod data { fn read() -> i32 { 7 } } fn main() { let value = data::read(); println!("{}", value); }

Исправьте объявление так, чтобы сборка прошла, не меняя точку входа.

Дан блок:

mod inner { pub(crate) fn tag() -> &'static str { "crate" } }

Скажите, сможет ли другой файл того же крейта обратиться к inner::tag и увидит ли имя соседний крейт из зависимостей.

Дана функция внутри блока без пометки. Опишите, кто может к ней обратиться по полному пути, а кто нет.

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