// TODO ^ Попробуйте раскомментировать эту строку

// Приватные элементы модуля не доступны напрямую,

// даже если вложенный модуль является публичным:

// Ошибка! функция `private_function` приватная

//my_mod::private_function();

// ЗАДАНИЕ ^ Попробуйте раскомментировать эту строку

// Ошибка! функция `private_function` приватная

//my_modmy::nested::private_function();

// ЗАДАНИЕ ^ Попробуйте раскомментировать эту строку

// Ошибка! Модуль `private_nested` является приватным

//my_mod::private_nested::function();

// ЗАДАНИЕ ^ Попробуйте раскомментировать эту строку

}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

<p id="Видимость_структуры"><strong><a l:href="#Видимость_структуры">Видимость структуры</a></strong></p>

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

// ЗАДАНИЕ ^ Попробуйте раскомментировать эту строку

}

Перейти на страницу:

Похожие книги