Видимость структуры

Структуры имеют дополнительный уровень видимости благодаря полями. По умолчанию видимость полей приватная, но, это можно изменить с помощью модификатора 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 и методы

Загрузка...