Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Область видимости

Модули задают границу приватности:

  • Элементы модуля по умолчанию приватные (это скрывает детали реализации).
  • Родительские и соседние элементы всегда видимы.
  • Иными словами, если элемент виден в модуле 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) — распространённый паттерн.
  • Реже можно дать видимость конкретному пути.
  • В любом случае видимость должна быть предоставлена родительскому модулю (и всем его потомкам).