Додаток 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(...) -> тип, |...| -> типТип, що повертає функція чи замикання
.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Побітове виключне АБО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::<...>Вказує параметри до узагальненого типу, функції чи методу у виразі; часто зветься "турборибою" (наприклад, "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Дозволити параметру узагальненого типу бути типом з динамічним розміром
'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 як індексу