Структуры имеют дополнительный уровень видимости благодаря полями. По умолчанию видимость полей приватная, но, это можно изменить с помощью модификатора pub. Приватная видимость имеет значение только при обращении к структуре извне модуля, где она определена, и необходимо скрыть информацию (инкапсуляция).
mod my {
// Публичная структура с публичным полем обобщённого типа `T`
pub struct OpenBox {
pub contents: T,
}
// Публичная структура с приватным полем обобщённого типа `T`
#[allow(dead_code)]
pub struct ClosedBox {
contents: T,
}
impl ClosedBox {
// Публичный конструктор
pub fn new(contents: T) -> ClosedBox {
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);
// ЗАДАНИЕ ^ Попробуйте раскомментировать эту строку
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
generics и методы