Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Приложение B: Операторы и символы

Это приложение содержит глоссарий синтаксиса Rust, включая операторы и другие символы, которые используются как самостоятельно, так и в контексте путей, дженериков (generics), ограничений трейтов (trait bounds), макросов, атрибутов, комментариев, кортежей и скобок.

Операторы

Таблица 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, and so onИндексация кортежа
...., 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Именованное время жизни или метка цикла
Digits immediately followed by u8, i32, f64, usize, and so onЧисловой литерал конкретного типа
"..."Строковый литерал
r"...", r#"..."#, r##"..."##, and so onСырой строковый литерал; escape-последовательности не обрабатываются
b"..."Байтовый строковый литерал; создаёт массив байтов вместо строки
br"...", br#"..."#, br##"..."##, and so onСырой байтовый литерал; комбинация сырого и байтового литералов
'...'Символьный литерал
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 показывает символы, которые используются в контексте ограничения параметров дженерик-типов через ограничения трейтов (trait bounds).

Таблица 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: Комментарии

СимволОбъяснение
//Однострочный комментарий
//!Внутренний однострочный doc-комментарий
///Внешний однострочный doc-комментарий
/*...*/Блочный комментарий
/*!...*/Внутренний блочный doc-комментарий
/**...*/Внешний блочный doc-комментарий

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