Приложение 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 в качестве «индекса» |