Приложение B: операторы и символы
В этом приложении собран глоссарий синтаксиса Rust: операторы и другие символы, которые встречаются сами по себе или в контексте путей, обобщений, ограничений трейтами, макросов, атрибутов, комментариев, кортежей и скобок.
Операторы
В таблице B-1 перечислены операторы Rust: пример того, как оператор выглядит в контексте, краткое пояснение и можно ли его перегрузить. Если оператор перегружаемый, указан трейт, через который это делается.
Таблица B-1: Операторы
| Оператор | Пример | Пояснение | Перегружается? |
|---|---|---|---|
! | ident!(...), ident!{...}, ident![...] | Раскрытие макроса | |
! | !expr | Побитовое или логическое отрицание | Not |
!= | expr != expr | Сравнение на неравенство | PartialEq |
% | expr % expr | Остаток от деления | Rem |
%= | var %= expr | Остаток от деления с присваиванием | RemAssign |
& | &expr, &mut expr | Заимствование | |
& | &type, &mut type, &'a type, &'a mut type | Тип заимствованного указателя (ссылки) | |
& | expr & expr | Побитовое И | BitAnd |
&= | var &= expr | Побитовое И с присваиванием | BitAndAssign |
&& | expr && expr | Логическое И с коротким замыканием | |
* | expr * expr | Умножение | Mul |
*= | var *= expr | Умножение с присваиванием | MulAssign |
* | *expr | Разыменование | Deref |
* | *const type, *mut type | Сырой указатель | |
+ | trait + trait, 'a + trait | Составное ограничение типа | |
+ | expr + expr | Сложение | Add |
+= | var += expr | Сложение с присваиванием | AddAssign |
, | expr, expr | Разделитель аргументов и элементов | |
- | - expr | Арифметическое отрицание (смена знака) | Neg |
- | expr - expr | Вычитание | Sub |
-= | var -= expr | Вычитание с присваиванием | SubAssign |
-> | fn(...) -> type, |…| -> type | Тип возвращаемого значения функции или замыкания | |
. | expr.ident | Доступ к полю | |
. | expr.ident(expr, ...) | Вызов метода | |
. | expr.0, expr.1 и так далее | Доступ к элементу кортежа по индексу | |
.. | .., expr.., ..expr, expr..expr | Литерал диапазона, не включающего правую границу | PartialOrd |
..= | ..=expr, expr..=expr | Литерал диапазона, включающего правую границу | PartialOrd |
.. | ..expr | Синтаксис обновления структуры | |
.. | variant(x, ..), struct_type { x, .. } | Образец «и всё остальное» | |
... | expr...expr | (Устарело, используйте ..=) В образце: диапазон, включающий границы | |
/ | expr / expr | Деление | Div |
/= | var /= expr | Деление с присваиванием | DivAssign |
: | pat: type, ident: type | Ограничения (аннотации типа) | |
: | ident: expr | Инициализация поля структуры | |
: | 'a: loop {...} | Метка цикла | |
; | expr; | Завершение инструкции или элемента | |
; | [...; len] | Часть синтаксиса массива фиксированного размера | |
<< | expr << expr | Сдвиг влево | Shl |
<<= | var <<= expr | Сдвиг влево с присваиванием | ShlAssign |
< | expr < expr | Сравнение «меньше» | PartialOrd |
<= | expr <= expr | Сравнение «меньше или равно» | PartialOrd |
= | var = expr, ident = type | Присваивание/эквивалентность | |
== | expr == expr | Сравнение на равенство | PartialEq |
=> | pat => expr | Часть синтаксиса ветки match | |
> | expr > expr | Сравнение «больше» | PartialOrd |
>= | expr >= expr | Сравнение «больше или равно» | PartialOrd |
>> | expr >> expr | Сдвиг вправо | Shr |
>>= | var >>= expr | Сдвиг вправо с присваиванием | ShrAssign |
@ | ident @ pat | Привязка в образце | |
^ | expr ^ expr | Побитовое исключающее ИЛИ | BitXor |
^= | var ^= expr | Побитовое исключающее ИЛИ с присваиванием | BitXorAssign |
| | pat | pat | Альтернативы в образце | |
| | expr | expr | Побитовое ИЛИ | BitOr |
|= | var |= expr | Побитовое ИЛИ с присваиванием | BitOrAssign |
|| | expr || expr | Логическое ИЛИ с коротким замыканием | |
? | expr? | Проброс ошибки |
Символы, не являющиеся операторами
В следующих таблицах собраны все символы, которые не работают как операторы, то есть не ведут себя как вызов функции или метода.
В таблице B-2 — символы, которые встречаются сами по себе и допустимы в самых разных местах.
Таблица B-2: Самостоятельный синтаксис
| Символ | Пояснение |
|---|---|
'ident | Именованное время жизни или метка цикла |
Цифры, сразу за которыми идёт u8, i32, f64, usize и так далее | Числовой литерал конкретного типа |
"..." | Строковый литерал |
r"...", r#"..."#, r##"..."## и так далее | Сырой строковый литерал; экранирующие последовательности не обрабатываются |
b"..." | Байтовый строковый литерал; создаёт массив байтов вместо строки |
br"...", br#"..."#, br##"..."## и так далее | Сырой байтовый строковый литерал; сочетание сырого и байтового литерала |
'...' | Символьный литерал |
b'...' | Байтовый литерал ASCII |
|…| expr | Замыкание |
! | Всегда пустой «низший» тип для расходящихся функций |
_ | «Игнорирующая» привязка в образце; также делает целочисленные литералы читаемее |
В таблице B-3 — символы, которые встречаются в пути к элементу через иерархию модулей.
Таблица B-3: Синтаксис путей
| Символ | Пояснение |
|---|---|
ident::ident | Путь в пространстве имён |
::path | Путь относительно корня крейта (то есть явно абсолютный путь) |
self::path | Путь относительно текущего модуля (то есть явно относительный путь) |
super::path | Путь относительно родителя текущего модуля |
type::ident, <type as trait>::ident | Ассоциированные константы, функции и типы |
<type>::... | Ассоциированный элемент типа, который нельзя назвать напрямую (например, <&T>::..., <[T]>::... и так далее) |
trait::method(...) | Уточнение вызова метода через имя трейта, в котором он определён |
type::method(...) | Уточнение вызова метода через имя типа, для которого он определён |
<type as trait>::method(...) | Уточнение вызова метода через имя трейта и типа |
В таблице B-4 — символы, которые встречаются при использовании обобщённых параметров типа.
Таблица B-4: Обобщения
| Символ | Пояснение |
|---|---|
path<...> | Задаёт параметры обобщённого типа в записи типа (например, Vec<u8>) |
path::<...>, method::<...> | Задаёт параметры обобщённого типа, функции или метода в выражении; часто называется турбофиш (turbofish), например "42".parse::<i32>() |
fn ident<...> ... | Определение обобщённой функции |
struct ident<...> ... | Определение обобщённой структуры |
enum ident<...> ... | Определение обобщённого перечисления |
impl<...> ... | Определение обобщённой реализации |
for<...> type | Ограничения времени жизни высшего ранга |
type<ident=type> | Обобщённый тип, у которого одному или нескольким ассоциированным типам заданы конкретные значения (например, Iterator<Item=T>) |
В таблице B-5 — символы, которые встречаются при ограничении обобщённых параметров типа трейтами.
Таблица B-5: Ограничения трейтами
| Символ | Пояснение |
|---|---|
T: U | Обобщённый параметр T ограничен типами, реализующими U |
T: 'a | Обобщённый тип T должен жить дольше времени жизни 'a (то есть тип не может, даже косвенно, содержать ссылки со временем жизни короче 'a) |
T: 'static | Обобщённый тип T не содержит заимствованных ссылок, кроме 'static |
'b: 'a | Обобщённое время жизни 'b должно быть дольше времени жизни 'a |
T: ?Sized | Разрешить обобщённому параметру типа быть типом с динамическим размером |
'a + trait, trait + trait | Составное ограничение типа |
В таблице B-6 — символы, которые встречаются при вызове или определении макросов и при указании атрибутов элемента.
Таблица B-6: Макросы и атрибуты
| Символ | Пояснение |
|---|---|
#[meta] | Внешний атрибут |
#![meta] | Внутренний атрибут |
$ident | Подстановка в макросе |
$ident:kind | Метапеременная макроса |
$(...)... | Повторение в макросе |
ident!(...), ident!{...}, ident![...] | Вызов макроса |
В таблице B-7 — символы, создающие комментарии.
Таблица B-7: Комментарии
| Символ | Пояснение |
|---|---|
// | Однострочный комментарий |
//! | Внутренний однострочный документационный комментарий |
/// | Внешний однострочный документационный комментарий |
/*...*/ | Блочный комментарий |
/*!...*/ | Внутренний блочный документационный комментарий |
/**...*/ | Внешний блочный документационный комментарий |
В таблице B-8 — контексты, в которых используются круглые скобки.
Таблица B-8: Круглые скобки
| Символ | Пояснение |
|---|---|
() | Пустой кортеж (он же единичный тип, unit) — и литерал, и тип |
(expr) | Выражение в скобках |
(expr,) | Выражение кортежа из одного элемента |
(type,) | Тип кортежа из одного элемента |
(expr, ...) | Выражение кортежа |
(type, ...) | Тип кортежа |
expr(expr, ...) | Вызов функции; также используется для инициализации кортежных struct и кортежных вариантов enum |
В таблице B-9 — контексты, в которых используются фигурные скобки.
Таблица B-9: Фигурные скобки
| Контекст | Пояснение |
|---|---|
{...} | Выражение-блок |
Type {...} | Литерал структуры |
В таблице B-10 — контексты, в которых используются квадратные скобки.
Таблица B-10: Квадратные скобки
| Контекст | Пояснение |
|---|---|
[...] | Литерал массива |
[expr; len] | Литерал массива, содержащий len копий expr |
[type; len] | Тип массива, содержащий len экземпляров type |
expr[expr] | Индексация коллекции; перегружается (Index, IndexMut) |
expr[..], expr[a..], expr[..b], expr[a..b] | Индексация коллекции, которая выглядит как взятие среза; в качестве «индекса» используется Range, RangeFrom, RangeTo или RangeFull |