Читаем Rust на примерах полностью

// Используем модификатор `pub`, чтобы сделать элемент публичным.

pub fn function() {

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

}

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

// данного модуля.

pub fn indirect_access() {

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

private_function();

}

// Модули так же могут быть вложенными

pub mod nested {

pub fn function() {

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

}

#[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();

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

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

Компьютерные сети. 6-е изд.
Компьютерные сети. 6-е изд.

Перед вами шестое издание самой авторитетной книги по современным сетевым технологиям, написанное признанным экспертом Эндрю Таненбаумом в соавторстве со специалистом компании Google Дэвидом Уэзероллом и профессором Чикагского университета Ником Фимстером. Первая версия этого классического труда появилась на свет в далеком 1980 году, и с тех пор каждое издание книги неизменно становилось бестселлером. В книге последовательно изложены основные концепции, определяющие современное состояние компьютерных сетей и тенденции их развития. Авторы подробно объясняют устройство и принципы работы аппаратного и программного обеспечения, рассматривают все аспекты и уровни организации сетей — от физического до прикладного. Изложение теоретических принципов дополняется яркими, показательными примерами функционирования интернета и компьютерных сетей различного типа. Большое внимание уделяется сетевой безопасности. Шестое издание полностью переработано с учетом изменений, произошедших в сфере сетевых технологий за последние годы, и, в частности, освещает такие технологии, как DOCSIS, 4G и 5G, беспроводные сети стандарта 802.11ax, 100-гигабитные сети Ethernet, интернет вещей, современные транспортные протоколы CUBIC TCP, QUIC и BBR, программно-конфигурируемые сети и многое другое.

Дэвид Уэзеролл , Ник Фимстер , Эндрю Таненбаум

Учебные пособия, самоучители