Дополнение Б: Операторы и обозначения
Это дополнение содержит глоссарий синтаксиса Rust, включая операторы и другие обозначения, которые появляются сами по себе или в контексте путей, обобщений, типажей, макросов, атрибутов, комментариев, кортежей и скобок.
Операторы
Таблица Б-1 содержит операторы языка Rust, пример появления оператора, короткое объяснение, возможность перегрузки оператора. Если оператор можно перегрузить, то показан типаж, с помощью которого его можно перегрузить.
Оператор | Пример | Объяснение | Перегружаемость |
---|---|---|---|
! | 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.. , ..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 | Pattern binding | |
^ | expr ^ expr | Побитовое исключающее ИЛИ | BitXor |
^= | var ^= expr | Побитовое исключающее ИЛИ и присваивание | BitXorAssign |
| | pat | pat | Альтернативные шаблоны | |
| | expr | expr | Побитовое ИЛИ | BitOr |
|= | var |= expr | Побитовое ИЛИ и присваивание | BitOrAssign |
|| | expr || expr | Короткое логическое ИЛИ | |
? | expr? | Возврат ошибки |
Обозначения не-операторы
Следующий список содержит все символы, которые не работают как операторы; то есть они не ведут себя как вызов функции или метода.
Таблица Б-2 показывает символы, которые появляются сами по себе и допустимы в различных местах.
Обозначение | Объяснение |
---|---|
'ident | Именованное время жизни или метка цикла |
...u8 , ...i32 , ...f64 , ...usize , etc. | Числовой литерал определённого типа |
"..." | Строковый литерал |
r"..." , r#"..."# , r##"..."## , etc. | Необработанный строковый литерал, в котором не обрабатываются escape-символы |
b"..." | Строковый литерал байтов; создаёт массив байтов вместо строки |
br"..." , br#"..."# , br##"..."## , etc. | Необработанный строковый байтовый литерал, комбинация необработанного и байтового литерала |
'...' | Символьный литерал |
b'...' | ASCII байтовый литерал |
|...| expr | Замыкание |
! | Всегда пустой тип для расходящихся функций |
_ | «Игнорируемое» связывание шаблонов; также используется для читабельности целочисленных литералов |
Таблица Б-3 показывает обозначения которые появляются в контексте путей иерархии модулей
Обозначение | Объяснение |
---|---|
ident::ident | Путь к пространству имён |
::path | Путь относительно корня крейта (т. е. явный абсолютный путь) |
self::path | Путь относительно текущего модуля (т. е. явный относительный путь). |
super::path | Путь относительно родительского модуля текущего модуля |
type::ident , <type as trait>::ident | Ассоциированные константы, функции и типы |
<type>::... | Ассоциированный элемент для типа, который не может быть назван прямо (например <&T>::... , <[T]>::... , etc.) |
trait::method(...) | Устранение неоднозначности вызова метода путём именования типажа, который определяет его |
type::method(...) | Устранение неоднозначности путём вызова метода через имя типа, для которого он определён |
<type as trait>::method(...) | Устранение неоднозначности вызова метода путём именования типажа и типа |
Таблица Б-4 показывает обозначения которые появляются в контексте использования обобщённых типов параметров
Обозначение | Объяснение |
---|---|
path<...> | Определяет параметры для обобщённых параметров в типе (e.g., Vec<u8> ) |
path::<...> , method::<...> | Определяет параметры для обобщённых параметров, функций, или методов в выражении. Часто называют turbofish (например "42".parse::<i32>() ) |
fn ident<...> ... | Определение обобщённой функции |
struct ident<...> ... | Определение обобщённой структуры |
enum ident<...> ... | Объявление обобщённого перечисления |
impl<...> ... | Определение обобщённой реализации |
for<...> type | Высокоуровневое связывание времени жизни |
type<ident=type> | Обобщённый тип где один или более ассоциированных типов имеют определённое присваивание (например Iterator<Item=T> ) |
Таблица Б-5 показывает обозначения которые появляются в контексте использования обобщённых типов параметров с ограничениями типов
Обозначение | Объяснение |
---|---|
T: U | Обобщённый параметр T ограничивается до типов которые реализуют типаж U |
T: 'a | Обобщённый тип T должен существовать не меньше чем 'a (то есть тип не может иметь ссылки с временем жизни меньше чем 'a ) |
T: 'static | Обобщённый тип T не имеет заимствованных ссылок кроме имеющих время жизни 'static |
'b: 'a | Обобщённое время жизни 'b должно быть не меньше чем 'a |
T: ?Sized | Позволяет обобщённым типам параметра иметь динамический размер |
'a + trait , trait + trait | Соединение ограничений типов |
Таблица Б-6 показывает обозначения, которые появляются в контексте вызова или определения макросов и указания атрибутов элемента.
Обозначение | Объяснение |
---|---|
#[meta] | Внешний атрибут |
#![meta] | Внутренний атрибут |
$ident | Подстановка в макросе |
$ident:kind | Захват макроса |
$(…)… | Повторение макроса |
ident!(...) , ident!{...} , ident![...] | Вызов макроса |
Таблица Б-7 показывает обозначения, которые создают комментарии.
Обозначение | Объяснение |
---|---|
// | Однострочный комментарий |
//! | Внутренний однострочный комментарий документации |
/// | Внешний однострочный комментарий документации |
/*...*/ | Многострочный комментарий |
/*!...*/ | Внутренний многострочный комментарий документации |
/**...*/ | Внешний многострочный комментарий документации |
Таблица Б-8 показывает обозначения, которые появляются в контексте использования кортежей.
Обозначение | Объяснение |
---|---|
() | Пустой кортеж, он же пустой тип. И литерал и тип. |
(expr) | Выражение в скобках |
(expr,) | Кортеж с одним элементом выражения |
(type,) | Кортеж с одним элементом типа |
(expr, ...) | Выражение кортежа |
(type, ...) | Тип кортежа |
(type, ...) | Выражение вызова функции; также используется для инициализации структур-кортежей и вариантов-кортежей перечисления |
expr.0 , expr.1 , etc. | Взятие элемента по индексу в кортеже |
Таблица Б-9 показывает контексты, в которых используются фигурные скобки.
Контекст | Объяснение |
---|---|
{...} | Выражение блока |
Type {...} | struct литерал |
Таблица Б-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 как "индекс" |