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

// Поэтому `Single` имеет конкретный тип, и `A` определена выше.

struct Single(A);

// ^ Здесь `A` в первый раз используется в `Single`.

// В данном примере, `` предшествует первому использованию `T`,

// поэтому `SingleGen` является обобщённым типом.

// Поскольку тип параметра `T` является обобщённым, он может быть чем угодно, включая

// конкретный тип `A`, определённый выше.

struct SingleGen(T);

fn main() {

// `Single` имеет конкретный тип и явно принимает параметр `A`.

let _s = Single(A);

// Создаём переменную `_char` типа `SingleGen`

// и присваиваем ей значение `SingleGen('a')`.

// В примере ниже, тип параметра `SingleGen` явно определён.

let _char: SingleGen = SingleGen('a');

// Здесь, `SingleGen` также может иметь неявно определённый параметр типа:

let _t = SingleGen(A); // Используется структура `A`, объявленная выше.

let _i32 = SingleGen(6); // Используется `i32`.

let _char = SingleGen('a'); // Используется `char`.

}

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

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

<p id="Смотрите_также_31"><strong><a l:href="#Смотрите_также_31">Смотрите также:</a></strong></p>

Структуры

<p id="Функции_1"><strong><a l:href="#Функции_1">Функции</a></strong></p>

Тот же набор правил применяется и к функциям: тип T становится обобщённым, когда предшествует .

При использовании обобщённых функций, иногда требуется явно указывать тип данных параметров. Это может быть необходимо в случае, если вызываемая функция возвращает обобщённый тип или у компилятора недостаточно информации для вывода необходимого типа данных.

Вызов функции с явно указанными типами данных параметров выглядит так: fun::().

struct A; // Конкретный тип `A`.

struct S(A); // Конкретный тип `S`.

struct SGen(T); // Обобщённый тип `SGen`.

// Все следующие функции становятся владельцем переменной, переданной в них.

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

// Объявляем функцию `reg_fn`, которая принимает аргумент `_s` типа `S`.

// Здесь отсутствует ``, поэтому это не обобщённая функция.

fn reg_fn(_s: S) {}

// Объявляем функцию `gen_spec_t`, которая принимает аргумент `_s` типа `SGen`.

// В ней явно задан параметр типа `A`, но поскольку `A` не был указан

// как параметр обобщённого типа для `gen_spec_t`, то он не является обобщённым.

fn gen_spec_t(_s: SGen) {}

// Объявляем функцию `gen_spec_i32`, которая принимает аргумент `_s` типа `SGen`.

// В ней явно задан тип `i32`, который является определённым типом.

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

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

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

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

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

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