Приложение 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##"..."## и т.д.Сырой строковый литерал; escape-символы не обрабатываются
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::<...>Задаёт параметры для обобщённого типа, функции или метода в выражении; часто называется "турбо-рыбой" (например, "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, ...)Выражение вызова функции; также используется для инициализации кортежных структур и вариантов перечислений-кортежей

Таблица 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 в качестве "индекса"