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, включая операторы и другие символы, которые появляются самостоятельно или в контексте путей, обобщений, ограничений типажей, макросов, атрибутов, комментариев, кортежей и скобок.

Операторы

В таблице 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Синтаксис обновления структуры (struct literal update syntax)
..variant(x, ..), struct_type { x, .. }Связывание образца «и остальное» («and the rest» pattern binding)
...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 (match arm syntax)
>expr > exprСравнение «больше»PartialOrd
>=expr >= exprСравнение «больше или равно»PartialOrd
>>expr >> exprСдвиг вправоShr
>>=var >>= exprСдвиг вправо и присваиваниеShrAssign
@ident @ patСвязывание в образце (pattern binding)
^expr ^ exprПобитовое исключающее ИЛИ (XOR)BitXor
^=var ^= exprПобитовое исключающее ИЛИ и присваиваниеBitXorAssign
|pat | patАльтернативы в образце (pattern alternatives)
|expr | exprПобитовое ИЛИBitOr
|=var |= exprПобитовое ИЛИ и присваиваниеBitOrAssign
||expr || exprЛогическое ИЛИ с коротким замыканием
?expr?Распространение ошибки (error propagation)

Неоператорные символы

Следующий список содержит все символы, которые не functioning как операторы; то есть они не ведут себя как вызов функции или метода.

Таблица B-2 показывает символы, которые появляются самостоятельно и допустимы в различных местах.

Таблица B-2: Самодостаточный синтаксис

СимволОбъяснение
'identИменованное время жизни или метка цикла
...u8, ...i32, ...f64, ...usize, и т.д.Числовой литерал с указанным типом
"..."Строковый литерал
r"...", r#"..."#, r##"..."##, и т.д.Сырой строковый литерал, escape-последовательности не обрабатываются
b"..."Байтовый строковый литерал; создаёт массив байтов вместо строки
br"...", br#"..."#, br##"..."##, и т.д.Сырой байтовый строковый литерал, комбинация сырого и байтового литерала
'...'Символьный литерал
b'...'ASCII-байтовый литерал
|…| exprЗамыкание
!Всегда пустой нижний тип (bottom type) для функций, которые никогда не возвращаются
_«Игнорируемое» связывание в образце; также используется для улучшения читаемости целочисленных литералов

Таблица B-3 показывает символы, которые появляются в контексте пути через иерархию модулей к элементу.

Таблица B-3: Синтаксис, связанный с путями

СимволОбъяснение
ident::identПуть в пространстве имён (namespace path)
::pathПуть относительно внешнего прелюда (extern prelude), где корневыми являются все остальные крейты (i.e., явно абсолютный путь, включающий имя крейта)
self::pathПуть относительно текущего модуля (i.e., явно относительный путь).
super::pathПуть относительно родительского модуля текущего модуля
type::ident, <type as trait>::identСвязанные константы, функции и типы
<type>::...Связанный элемент для типа, который нельзя назвать напрямую (например, <&T>::..., <[T]>::..., и т.д.)
trait::method(...)Уточнение вызова метода путём указания типажа, который его определяет
type::method(...)Уточнение вызова метода путём указания типа, для которого он определён
<type as trait>::method(...)Уточнение вызова метода путём указания типажа и типа

Таблица B-4 показывает символы, которые появляются в контексте использования обобщённых (generic) параметров типов.

Таблица B-4: Обобщения

СимволОбъяснение
path<...>Указывает параметры для обобщённого типа в типе (например, Vec<u8>)
path::<...>, method::<...>Указывает параметры для обобщённого типа, функции или метода в выражении; часто называется «турбо-рыба» (turbofish) (например, "42".parse::<i32>())
fn ident<...> ...Определяет обобщённую функцию
struct ident<...> ...Определяет обобщённую структуру
enum ident<...> ...Определяет обобщённое перечисление
impl<...> ...Определяет обобщённую реализацию (implementation)
for<...> typeОграничения времени жизни высшего порядка (higher-ranked lifetime bounds)
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Разрешить обобщённому параметру типа быть динамически размещённым типом (dynamically sized type)
'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 {...}Литерал struct

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