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