Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Додаток B: Оператори та символи

Цей додаток містить глосарій синтаксису Rust, включно з операторами та іншими символами, які з’являються самі по собі або в контексті шляхів, generics, trait bounds, macros, attributes, comments, tuples, and brackets.

Оператори

Table B-1 містить оператори в Rust, приклад того, як оператор виглядатиме в контексті, коротке пояснення та чи є цей оператор перевантажуваним. Якщо оператор перевантажуваний, перелічується відповідний trait, який потрібно використати для перевантаження цього оператора.

Table B-1: Operators

OperatorExampleExplanationOverloadable?
!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Побітове ANDBitAnd
&=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.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Побітове виключне ORBitXor
^=var ^= exprПобітове виключне OR і присвоєнняBitXorAssign
|pat | patАльтернативи зразка
|expr | exprПобітове ORBitOr
|=var |= exprПобітове OR і присвоєнняBitOrAssign
||expr || exprЛогічне OR із коротким замиканням
?expr?Поширення помилки

Символи, що не є операторами

Наведені нижче таблиці містять усі символи, які не виконують функції операторів; тобто вони не поводяться як виклик функції чи методу.

Table B-2 показує символи, які з’являються самі по собі та є допустимими в різноманітних місцях.

Table B-2: Stand-alone Syntax

SymbolExplanation
'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Замикання
!Завжди порожній нижній тип для функцій, що розходяться
_Зв’язування зразка «ігноровано»; також використовується, щоб зробити цілі числові літерали читабельними

Table B-3 shows symbols that appear in the context of a path through the module hierarchy to an item.

Table B-3: Path-Related Syntax

SymbolExplanation
ident::identШлях простору імен
::pathШлях відносно кореня крейту (тобто явно абсолютний шлях)
self::pathШлях відносно поточного модуля (тобто явно відносний шлях)
super::pathШлях відносно батька поточного модуля
type::ident, <type as trait>::identАсоційовані константи, функції та типи
<type>::...Асоційований елемент для типу, який не можна назвати напряму (наприклад, <&T>::..., <[T]>::... тощо)
trait::method(...)Уточнення виклику методу шляхом вказування трейтy, який його визначає
type::method(...)Уточнення виклику методу шляхом вказування типу, для якого він визначений
<type as trait>::method(...)Уточнення виклику методу шляхом вказування трейтa та типу

Table B-4 shows symbols that appear in the context of using generic type parameters.

Table B-4: Generics

SymbolExplanation
path<...>Specifies parameters to a generic type in a type (for example, Vec<u8>)
path::<...>, method::<...>Specifies parameters to a generic type, function, or method in an expression; often referred to as turbofish (for example, "42".parse::<i32>())
fn ident<...> ...Define generic function
struct ident<...> ...Define generic structure
enum ident<...> ...Define generic enumeration
impl<...> ...Define generic implementation
for<...> typeHigher ranked lifetime bounds
type<ident=type>A generic type where one or more associated types have specific assignments (for example, Iterator<Item=T>)

Table B-5 shows symbols that appear in the context of constraining generic type parameters with trait bounds.

Table B-5: Trait Bound Constraints

SymbolExplanation
T: UGeneric parameter T constrained to types that implement U
T: 'aGeneric type T must outlive lifetime 'a (meaning the type cannot transitively contain any references with lifetimes shorter than 'a)
T: 'staticGeneric type T contains no borrowed references other than 'static ones
'b: 'aGeneric lifetime 'b must outlive lifetime 'a
T: ?SizedAllow generic type parameter to be a dynamically sized type
'a + trait, trait + traitCompound type constraint

Table B-6 shows symbols that appear in the context of calling or defining macros and specifying attributes on an item.

Table B-6: Macros and Attributes

SymbolExplanation
#[meta]Зовнішній атрибут
#![meta]Внутрішній атрибут
$identПідстановка макросу
$ident:kindМетазмінна макросу
$(...)...Повторення макросу
ident!(...), ident!{...}, ident![...]Виклик макросу

Table B-7 shows symbols that create comments.

Table B-7: Comments

SymbolExplanation
//Коментар до рядка
//!Внутрішній рядковий документувальний коментар
///Зовнішній рядковий документувальний коментар
/*...*/Блоковий коментар
/*!...*/Внутрішній блоковий документувальний коментар
/**...*/Зовнішній блоковий документувальний коментар

Table B-8 shows the contexts in which parentheses are used.

Table B-8: Parentheses

SymbolExplanation
()Порожній кортеж (також unit), і як літерал, і як тип
(expr)Вираз у дужках
(expr,)Вираз кортежу з одним елементом
(type,)Тип кортежу з одним елементом
(expr, ...)Вираз кортежу
(type, ...)Тип кортежу
expr(expr, ...)Вираз виклику функції; також використовується для ініціалізації кортежних structs і кортежних варіантів enum

Table B-9 shows the contexts in which curly brackets are used.

Table B-9: Curly Brackets

ContextExplanation
{...}Вираз блоку
Type {...}Літерал структури

Table B-10 shows the contexts in which square brackets are used.

Table B-10: Square Brackets

ContextExplanation
[...]Літерал масиву
[expr; len]Літерал масиву, що містить len копій expr
[type; len]Тип масиву, що містить len екземплярів type
expr[expr]Індексування колекції; перевантажуване (Index, IndexMut)
expr[..], expr[a..], expr[..b], expr[a..b]Індексування колекції, що вдає із себе зріз колекції, використовуючи Range, RangeFrom, RangeTo або RangeFull як «індекс`