9.6 KiB
[TOC]
Appendix B: Operators and Symbols
This appendix contains a glossary of Rust’s syntax, including operators and other symbols that appear by themselves or in the context of paths, generics, trait bounds, macros, attributes, comments, tuples, and brackets.
Operators
Table B-1 contains the operators in Rust, an example of how the operator would appear in context, a short explanation, and whether that operator is overloadable. If an operator is overloadable, the relevant trait to use to overload that operator is listed.
Table B-1: Operators
| Operator | Example | Explanation | Overloadable? |
|---|---|---|---|
! |
ident!(...), ident!{...}, ident![...] |
Macro expansion | |
! |
!expr |
Bitwise or logical complement | Not |
!= |
expr != expr |
Nonequality comparison | PartialEq |
% |
expr % expr |
Arithmetic remainder | Rem |
%= |
var %= expr |
Arithmetic remainder and assignment | RemAssign |
& |
&expr, &mut expr |
Borrow | |
& |
&type, &mut type, &'a type, &'a mut type |
Borrowed pointer | |
| type | |||
& |
expr & expr |
Bitwise AND | BitAnd |
&= |
var &= expr |
Bitwise AND and assignment | BitAndAssign |
&& |
expr && expr |
Short-circuiting logical AND | |
* |
expr * expr |
Arithmetic multiplication | Mul |
*= |
var *= expr |
Arithmetic multiplication and assignment | MulAssign |
* |
*expr |
Dereference | Deref |
* |
*const type, *mut type |
Raw pointer | |
+ |
trait + trait, 'a + trait |
Compound type constraint | |
+ |
expr + expr |
Arithmetic addition | Add |
+= |
var += expr |
Arithmetic addition and assignment | AddAssign |
, |
expr, expr |
Argument and element separator | |
- |
- expr |
Arithmetic negation | Neg |
- |
expr - expr |
Arithmetic subtraction | Sub |
-= |
var -= expr |
Arithmetic subtraction and assignment | SubAssign |
-> |
fn(...) -> type, ` |
... | -> type` |
. |
expr.ident |
Field access | |
. |
expr.ident(expr, ...) |
Method call | |
. |
expr.0, expr.1, and so on |
Tuple indexing | |
.. |
.., expr.., ..expr, expr..expr |
Right-exclusive range literal | |
PartialOrd |
|||
..= |
..=expr, expr..=expr |
Right-inclusive range literal | |
PartialOrd |
|||
.. |
..expr |
Struct literal update syntax | |
.. |
variant(x, ..), struct_type { x, .. } |
“And the rest” pattern | |
| binding | |||
... |
expr...expr |
(Deprecated, use ..= instead) In a pattern: |
|
| inclusive range pattern | |||
/ |
expr / expr |
Arithmetic division | Div |
/= |
var /= expr |
Arithmetic division and assignment | DivAssign |
: |
pat: type, ident: type |
Constraints | |
: |
ident: expr |
Struct field initializer | |
: |
'a: loop {...} |
Loop label | |
; |
expr; |
Statement and item terminator | |
; |
[...; len] |
Part of fixed-size array syntax | |
<< |
expr << expr |
Left-shift | Shl |
<<= |
var <<= expr |
Left-shift and assignment | ShlAssign |
< |
expr < expr |
Less than comparison | PartialOrd |
<= |
expr <= expr |
Less than or equal to comparison | PartialOrd |
= |
var = expr, ident = type |
Assignment/equivalence | |
== |
expr == expr |
Equality comparison | PartialEq |
=> |
pat => expr |
Part of match arm syntax | |
> |
expr > expr |
Greater than comparison | PartialOrd |
>= |
expr >= expr |
Greater than or equal to comparison | PartialOrd |
>> |
expr >> expr |
Right-shift | Shr |
>>= |
var >>= expr |
Right-shift and assignment | ShrAssign |
@ |
ident @ pat |
Pattern binding | |
^ |
expr ^ expr |
Bitwise exclusive OR | BitXor |
^= |
var ^= expr |
Bitwise exclusive OR and assignment | BitXorAssign |
| ` | ` | `pat | pat` |
| ` | ` | `expr | expr` |
| ` | =` | `var | = expr` |
| ` | ` | `expr | |
? |
expr? |
Error propagation |
Non-operator Symbols
The following tables contain all symbols that don’t function as operators; that is, they don’t behave like a function or method call.
Table B-2 shows symbols that appear on their own and are valid in a variety of locations.
Table B-2: Stand-alone Syntax
| Symbol | Explanation |
|---|---|
'ident |
Named lifetime or loop label |
Digits immediately followed by u8, i32, f64, usize, and so on |
|
| Numeric literal of specific type | |
"..." |
String literal |
r"...", r#"..."#, r##"..."##, and so on |
Raw string literal; escape |
| characters not processed | |
b"..." |
Byte string literal; constructs an array of bytes instead of a |
| string | |
br"...", br#"..."#, br##"..."##, and so on |
Raw byte string literal; |
| combination of raw and byte string literal | |
'...' |
Character literal |
b'...' |
ASCII byte literal |
| ` | ... |
! |
Always-empty bottom type for diverging functions |
_ |
“Ignored” pattern binding; also used to make integer literals readable |
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 |
Namespace path |
::path |
Path relative to the crate root (that is, an explicitly absolute |
| path) | |
self::path |
Path relative to the current module (that is, an explicitly |
| relative path) | |
super::path |
Path relative to the parent of the current module |
type::ident, <type as trait>::ident |
Associated constants, functions, |
| and types | |
<type>::... |
Associated item for a type that cannot be directly named (for |
example, <&T>::..., <[T]>::..., and so on) |
|
trait::method(...) |
Disambiguating a method call by naming the trait that |
| defines it | |
type::method(...) |
Disambiguating a method call by naming the type for |
| which it’s defined | |
<type as trait>::method(...) |
Disambiguating a method call by naming the |
| trait and type |
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] |
Outer attribute |
#![meta] |
Inner attribute |
$ident |
Macro substitution |
$ident:kind |
Macro metavariable |
$(...)... |
Macro repetition |
ident!(...), ident!{...}, ident![...] |
Macro invocation |
Table B-7 shows symbols that create comments.
Table B-7: Comments
| Symbol | Explanation |
|---|---|
// |
Line comment |
//! |
Inner line doc comment |
/// |
Outer line doc comment |
/*...*/ |
Block comment |
/*!...*/ |
Inner block doc comment |
/**...*/ |
Outer block doc comment |
Table B-8 shows the contexts in which parentheses are used.
Table B-8: Parentheses
| Symbol | Explanation |
|---|---|
() |
Empty tuple (aka unit), both literal and type |
(expr) |
Parenthesized expression |
(expr,) |
Single-element tuple expression |
(type,) |
Single-element tuple type |
(expr, ...) |
Tuple expression |
(type, ...) |
Tuple type |
expr(expr, ...) |
Function call expression; also used to initialize tuple |
structs and tuple enum variants |
Table B-9 shows the contexts in which curly brackets are used.
Table B-9: Curly Brackets
| Context | Explanation |
|---|---|
{...} |
Block expression |
Type {...} |
Struct literal |
Table B-10 shows the contexts in which square brackets are used.
Table B-10: Square Brackets
| Context | Explanation |
|---|---|
[...] |
Array literal |
[expr; len] |
Array literal containing len copies of expr |
[type; len] |
Array type containing len instances of type |
expr[expr] |
Collection indexing; overloadable (Index, IndexMut) |
expr[..], expr[a..], expr[..b], expr[a..b] |
Collection indexing |
pretending to be collection slicing, using Range, RangeFrom, RangeTo, or |
|
RangeFull as the “index” |