Додаток 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 | Побітове AND | BitAnd |
&= | var &= expr | Побітове AND з присвоєнням | BitAndAssign |
&& | expr && expr | Логічне AND зі скороченим обчисленням | |
* | 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 | Зв'язування шаблона | |
^ | expr ^ expr | Побітове виключне OR | BitXor |
^= | var ^= expr | Побітове виключне OR з присвоєнням | BitXorAssign |
| | pat | pat | Альтернативні шаблони | |
| | expr | expr | Побітове OR | BitOr |
|= | var |= expr | Побітове OR із присвоєнням | BitOrAssign |
|| | expr || expr | Логічне OR зі скороченим обчисленням | |
? | 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::<...> | Вказує параметри до узагальненого типу, функції чи методу у виразі; часто зветься "турборибою" (наприклад, "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 |
Т: 'a | Узагальнений тип T має пережити час існування 'a (тобто тип не може транзитивно містити посилання з часом існування меншим ніж 'a) |
T: 'static | Узагальнений тип T не містить позичених посилань, окрім 'static |
'b: 'a | Узагальнений час існування 'b має перевищувати час існування 'a |
T: ?Sized | Узагальнений тип T має бути типом з динамічним розміром |
'a + trait, trait + trait | Комбіноване обмеження типу |
Таблиця B-6 містить символи, що зустрічаються в контексті виклику чи визначення макросів і зазначення атрибутів елементу.
Таблиця B-6: Макроси та атрибути
| Символ | Пояснення |
|---|---|
#[meta] | Зовнішній атрибут |
#![meta] | Внутрішній атрибут |
$ident | Підставлення в макросі |
$ident:kind | Захоплення в макросі |
$(…)… | Повторення в макросі |
ident!(...), ident!{...}, ident![...] | Виклик макросу |
Таблиця B-7 містить символи для створення коментарів.
Таблиця B-7: Коментарі
| Символ | Пояснення |
|---|---|
// | Коментар-рядок |
//! | Внутрішній документаційний коментар-рядок |
/// | Зовнішній документаційний коментар-рядок |
/*...*/ | Коментар-блок |
/*!...*/ | Внутрішній документаційний коментар-блок |
/**...*/ | Зовнішній документаційний коментар-блок |
Таблиця B-8 містить символи, що зустрічаються в контексті використання кортежів.
Таблиця B-8: Кортежі
| Символ | Пояснення |
|---|---|
() | Порожній кортеж (також відомий як одиничний тип), як літерал, так і тип |
(expr) | Вираз у дужках |
(expr,) | Вираз - кортеж з одного елементу |
(type,) | Тип - кортеж з одного елементу |
(expr, ...) | Вираз - кортеж з декількома елементами |
(type, ...) | Тип - кортеж з декількома елементами |
expr(expr, ...) | Виклик функції; також використовується для ініціалізації кортежів-структур і кортежів-варіантів енумів |
expr.0, expr.1, і т.д. | Індексація кортежу |
Таблиця 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, or RangeFull як індексу |