Область видимости
Модули задают границу приватности:
- Элементы модуля по умолчанию приватные (это скрывает детали реализации).
- Родительские и соседние элементы всегда видимы.
- Иными словами, если элемент виден в модуле
foo, он виден во всех потомкахfoo.
// Copyright 2022 Google LLC
// SPDX-License-Identifier: Apache-2.0
mod outer {
fn private() {
println!("outer::private");
}
pub fn public() {
println!("outer::public");
}
mod inner {
fn private() {
println!("outer::inner::private");
}
pub fn public() {
println!("outer::inner::public");
super::private();
}
}
}
fn main() {
outer::public();
}
This slide should take about 5 minutes.
- Используйте ключевое слово
pub, чтобы сделать модули публичными.
Кроме того, есть продвинутые спецификаторы pub(...), которые ограничивают область публичной видимости.
- См. Rust Reference.
- Настройка видимости
pub(crate)— распространённый паттерн. - Реже можно дать видимость конкретному пути.
- В любом случае видимость должна быть предоставлена родительскому модулю (и всем его потомкам).