Бесплатная библиотека
Читайте книгу на сайте или телефоне
Rust на примерах - Читать Любимую Русскую Полную Книгу 👉 Read-E-Book.com

Rust на примерах

Электронная книга - «Rust на примерах». Краткое содержание книги:

https://doc.rust-lang.ru/stable/rust-by-example/
1 ... 28 29 30 31 32 33 34 35 36 ... 92
Перейти на страницу:

}

#[allow(dead_code)]

fn private_function() {

println!("вызвана `my_mod::nested::private_function()`");

}

// Функции объявленные с использованием синтаксиса `pub(in path)` будет видна

// только в пределах заданного пути.

// `path` должен быть родительским или наследуемым модулем

pub(in my_mod) fn public_function_in_my_mod() {

print!("вызвана `my_mod::nested::public_function_in_my_mod()`, котораяn > ");

public_function_in_nested()

}

// Функции объявленные с использованием синтаксиса `pub(self)` будет видна

// только в текущем модуле

pub(self) fn public_function_in_nested() {

println!("вызвана `my_mod::nested::public_function_in_nested");

}

// Функции объявленные с использованием синтаксиса `pub(super)` будет видна

// только в родительском модуле

pub(super) fn public_function_in_super_mod() {

println!("вызвана my_mod::nested::public_function_in_super_mod");

}

}

pub fn call_public_function_in_my_mod() {

print!("вызвана `my_mod::call_public_funcion_in_my_mod()`, котораяn> ");

nested::public_function_in_my_mod();

print!("> ");

nested::public_function_in_super_mod();

}

// pub(crate) сделает функцию видимой для всего текущего контейнера

pub(crate) fn public_function_in_crate() {

println!("called `my_mod::public_function_in_crate()");

}

// Вложенные модули подчиняются тем же правилам видимости

mod private_nested {

#[allow(dead_code)]

pub fn function() {

println!("вызвана `my_mod::private_nested::function()`");

}

}

}

fn function() {

println!("вызвана `function()`");

}

fn main() {

// Модули позволяют устранить противоречия между элементами,

// которые имеют одинаковые названия.

function();

my_mod::function();

// Публичные элементы, включая те, что находятся во вложенном модуле,

// доступны извне родительского модуля

my_mod::indirect_access();

my_mod::nested::function();

my_mod::call_public_function_in_my_mod();

// pub(crate) элементы можно вызвать от везде в этом же пакете

my_mod::public_function_in_crate();

// pub(in path) элементы могут вызываться только для указанного модуля

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

//my_mod::nested::public_function_in_my_mod();

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

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

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

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

//my_mod::private_function();

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

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

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

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

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

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

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

}

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

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

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

// Публичная структура с публичным полем может быть создана, как обычно

1 ... 28 29 30 31 32 33 34 35 36 ... 92
Перейти на страницу:
0
Сюжет
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
0
Атмосфера
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
0
Главный герой
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
0
Общее впечатление
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
Итоговая оценка: 0.0 из 10 (голосов: 0 / История оценок)