По умолчанию, элементы модуля являются приватными,
но это можно изменить добавив модификатор pub
.
Только публичные элементы модуля могут быть доступны за пределами его области видимости.
// Модуль по имени `my` mod my { // Все элементы модуля по умолчанию являются приватными. fn private_function() { println!("вызвана `my::private_function()`"); } // Используем модификатор `pub`, чтобы сделать элемент публичным. pub fn function() { println!("вызвана `my::function()`"); } // Приватные элементы модуля доступны другим элементам // данного модуля. pub fn indirect_access() { print!("вызвана `my::indirect_access()`, that\n> "); private_function(); } // Модули так же могут быть вложенными pub mod nested { pub fn function() { println!("вызвана `my::nested::function()`"); } #[allow(dead_code)] fn private_function() { println!("вызвана `my::nested::private_function()`"); } } // Вложенные модули подчиняются тем же правилам видимости mod private_nested { #[allow(dead_code)] pub fn function() { println!("вызвана `my::private_nested::function()`"); } } } fn function() { println!("вызвана `function()`"); } fn main() { // Модули позволяют устранить противоречия между элементами, которые имеют одинаковые названия. function(); my::function(); // Публичные элементы, включая те, что находятся во вложенном модуле, // доступны извне родительского модуля my::indirect_access(); my::nested::function(); // Приватные элементы модуля не доступны напрямую, // даже если вложенный модуль является публичным: // Ошибка! функция `private_function` приватная //my::private_function(); // ЗАДАНИЕ ^ Попробуйте раскомментировать эту строку // Ошибка! функция `private_function` приватная //my::nested::private_function(); // ЗАДАНИЕ ^ Попробуйте раскомментировать эту строку // Ошибка! Модуль `private_nested` является приватным //my::private_nested::function(); // ЗАДАНИЕ ^ Попробуйте раскомментировать эту строку }