Ключевое слово pub(super)
Ключевое слово pub(super) позволяет сделать элемент
видимым только для родительского модуля. Это полезно,
когда нужно скрыть детали реализации от других частей
программы, но предоставить к ним доступ из родительского
модуля. Элемент с такой видимостью не будет доступен
внутри текущего модуля для внешних модулей, но будет
виден на уровень выше.
Синтаксис
pub(super) fn function_name() {}
pub(super) struct StructName;
pub(super) const CONSTANT: i32 = 10;
Пример
Давайте рассмотрим пример, где функция internal
видна только родительскому модулю:
mod outer
{
pub(super) fn internal()
{
println!("Called from parent");
}
pub mod inner
{
pub fn call_internal()
{
// super refers to outer module
super::internal();
}
}
}
fn main()
{
outer::inner::call_internal();
}
Результат выполнения кода:
"Called from parent"
Пример
Давайте попробуем вызвать функцию internal
напрямую из функции main, что вызовет ошибку
компиляции, так как она видна только родительскому модулю:
mod outer
{
pub(super) fn internal()
{
println!("Called from parent");
}
}
fn main()
{
// Error: function `internal` is private
outer::internal();
}
Результат выполнения кода:
error[E0603]: function `internal` is private
Смотрите также
-
ключевое слово
visibility,
которое управляет видимостью элементов -
ключевое слово
pub(crate),
которое делает элемент видимым в пределах всего крейта -
концепция
ownership,
которая определяет правила владения данными -
концепция
borrowing,
которая позволяет использовать данные без передачи владения