Видимість

Модулі є межею конфіденційності:

  • Елементи модуля є приватними за замовчуванням (приховує деталі реалізації).
  • Батьківські та споріднені елементи завжди видно.
  • Іншими словами, якщо елемент видимий у модулі foo, він видимий у всіх нащадках foo.
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.
  • Налаштування видимості pub(crate) є типовим шаблоном.
  • Рідше ви можете надати видимість певному шляху.
  • У будь-якому випадку видимість повинна бути надана модулю-предпопереднику (і всім його нащадкам).