Додаток B: Оператори та символи
Цей додаток містить глосарій синтаксису Rust, включно з операторами та іншими символами, які з’являються самі по собі або в контексті шляхів, generics, trait bounds, macros, attributes, comments, tuples, and brackets.
Оператори
Table B-1 містить оператори в Rust, приклад того, як оператор виглядатиме в контексті, коротке пояснення та чи є цей оператор перевантажуваним. Якщо оператор перевантажуваний, перелічується відповідний trait, який потрібно використати для перевантаження цього оператора.
Table B-1: Operators
| Operator | Example | Explanation | Overloadable? |
|---|---|---|---|
! | 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.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 | Побітове виключне OR | BitXor |
^= | var ^= expr | Побітове виключне OR і присвоєння | BitXorAssign |
| | pat | pat | Альтернативи зразка | |
| | expr | expr | Побітове OR | BitOr |
|= | var |= expr | Побітове OR і присвоєння | BitOrAssign |
|| | expr || expr | Логічне OR із коротким замиканням | |
? | expr? | Поширення помилки |
Символи, що не є операторами
Наведені нижче таблиці містять усі символи, які не виконують функції операторів; тобто вони не поводяться як виклик функції чи методу.
Table B-2 показує символи, які з’являються самі по собі та є допустимими в різноманітних місцях.
Table B-2: Stand-alone Syntax
| Symbol | Explanation |
|---|---|
'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
| Symbol | Explanation |
|---|---|
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
| Symbol | Explanation |
|---|---|
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<...> type | Higher 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
| Symbol | Explanation |
|---|---|
T: U | Generic parameter T constrained to types that implement U |
T: 'a | Generic type T must outlive lifetime 'a (meaning the type cannot transitively contain any references with lifetimes shorter than 'a) |
T: 'static | Generic type T contains no borrowed references other than 'static ones |
'b: 'a | Generic lifetime 'b must outlive lifetime 'a |
T: ?Sized | Allow generic type parameter to be a dynamically sized type |
'a + trait, trait + trait | Compound 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
| Symbol | Explanation |
|---|---|
#[meta] | Зовнішній атрибут |
#![meta] | Внутрішній атрибут |
$ident | Підстановка макросу |
$ident:kind | Метазмінна макросу |
$(...)... | Повторення макросу |
ident!(...), ident!{...}, ident![...] | Виклик макросу |
Table B-7 shows symbols that create comments.
Table B-7: Comments
| Symbol | Explanation |
|---|---|
// | Коментар до рядка |
//! | Внутрішній рядковий документувальний коментар |
/// | Зовнішній рядковий документувальний коментар |
/*...*/ | Блоковий коментар |
/*!...*/ | Внутрішній блоковий документувальний коментар |
/**...*/ | Зовнішній блоковий документувальний коментар |
Table B-8 shows the contexts in which parentheses are used.
Table B-8: Parentheses
| Symbol | Explanation |
|---|---|
() | Порожній кортеж (також 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
| Context | Explanation |
|---|---|
{...} | Вираз блоку |
Type {...} | Літерал структури |
Table B-10 shows the contexts in which square brackets are used.
Table B-10: Square Brackets
| Context | Explanation |
|---|---|
[...] | Літерал масиву |
[expr; len] | Літерал масиву, що містить len копій expr |
[type; len] | Тип масиву, що містить len екземплярів type |
expr[expr] | Індексування колекції; перевантажуване (Index, IndexMut) |
expr[..], expr[a..], expr[..b], expr[a..b] | Індексування колекції, що вдає із себе зріз колекції, використовуючи Range, RangeFrom, RangeTo або RangeFull як «індекс` |