В Rust уровни видимости определяют доступность элементов (функций, структур, перечислений и т. д.) в разных модулях и крейтах. По умолчанию элементы имеют частную видимость, то есть к ним можно получить доступ только в текущем модуле. Вы можете использовать модификаторы видимости, чтобы изменить видимость элемента.

Понимание уровней видимости Rust

Вот более подробное объяснение уровней видимости Rust.

1. Частный (без модификатора видимости)

Элементы без модификатора видимости по умолчанию являются частными. Доступ к ним возможен только из текущего модуля, а не из других модулей или крейтов. Это самый ограниченный уровень видимости.

fn private_function() {
    // This function is only accessible within its module
}

2. Общедоступный (pub)

Когда элемент помечен pub, он становится общедоступным из любого модуля, включая внешние ящики, зависящие от текущего ящика. Это самый допустимый уровень видимости.

pub fn public_function() {
    // This function is accessible from any module and external crates
}

3. Уровень ящика (pub(crate))

Элемент, отмеченный pub(crate), является общедоступным в текущем крейте, что означает, что к нему можно получить доступ из любого модуля в том же крейте. Однако он недоступен из других ящиков, зависящих от текущего ящика. Этот уровень видимости полезен, когда вы хотите показать элементы внутри, но скрыть их от внешних пользователей.

pub(crate) fn crate_level_function() {
    // This function is accessible within the current crate only
}

4. Суперуровень (pub(super)):

Уровень видимости pub(super) делает элемент общедоступным в родительском модуле (на один уровень выше) и его дочерних модулях. Это полезно, когда вы хотите предоставить элемент родительскому модулю, но ограничить доступ из несвязанных модулей.

pub(super) fn super_level_function() {
    // This function is accessible in the parent module and its child modules
}

5. На основе пути (pub(in path::to::module)):

С этим уровнем видимости элемент становится общедоступным в пределах указанного пути модуля и его дочерних модулей. Это позволяет точно контролировать видимость элемента.

pub(in crate::path::to::module) fn path_based_function() {
    // This function is accessible within the specified module and its child modules
}

Важность уровней видимости

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