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Синтаксис обновления структуры
..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