Видимость структуры
Структуры имеют дополнительный уровень видимости благодаря полям. По умолчанию
видимость полей приватная, но это можно изменить с помощью модификатора pub
.
Приватная видимость имеет значение только при обращении к структуре извне модуля,
где она определена, и имеет целью скрытие информации (инкапсуляция).
mod my { // Публичная структура с публичным полем обобщённого типа `T` pub struct OpenBox<T> { pub contents: T, } // Публичная структура с приватным полем обобщённого типа `T` #[allow(dead_code)] pub struct ClosedBox<T> { contents: T, } impl<T> ClosedBox<T> { // Публичный конструктор pub fn new(contents: T) -> ClosedBox<T> { ClosedBox { contents: contents, } } } } fn main() { // Публичные структуры с публичными полеми могут быть созданы как обычно, let open_box = my::OpenBox { contents: "публичную информацию" }; // а их поля доступны всем. println!("Открытая упаковка хранит: {}", open_box.contents); // Публичные структуры с приватными полями не могут быть созданы с использованием имён полей // Ошибка! `ClosedBox` имеет приватные поля //let closed_box = my::ClosedBox { contents: "классифицированную информацию" }; // ЗАДАНИЕ ^ Попробуйте раскомментировать эту строку // Однако, структуры с приватными полями могут быть созданы с помощью // публичного конструктора let _closed_box = my::ClosedBox::new("классифицированную информацию"); // нельзя получить доступ к приватным полям публичных структур. // Ошибка! Поле `contents` приватное //println!("Закрытая упаковка хранит: {}", _closed_box.contents); // ЗАДАНИЕ ^ Попробуйте раскомментировать эту строку }