Appendice B: Operatori e Simboli
Questa appendice contiene un glossario della sintassi di Rust, compresi gli operatori e altri simboli che appaiono da soli o nel contesto di percorsi, generics, traits, macro, attributi, commenti, tuple e parentesi.
Operatori
La Tabella B-1 contiene gli operatori in Rust, un esempio di come l’operatore appare nel contesto, una breve spiegazione e se l’operatore in questione è sovrascrivibile. Se un operatore è sovrascrivibile, viene elencato il relativo trait da utilizzare per sovrascriverlo.
Tabella B-1: Operatori
| Operatore | Esempio | Spiegazione | Sovrascrivibile |
|---|---|---|---|
! | ident!(...), ident!{...}, ident![...] | Espansione delle macro | |
! | !expr | Complemento logico o bit per bit | Not |
!= | expr != expr | Differente | PartialEq |
% | expr % expr | Resto aritmetico | Rem |
%= | var %= expr | Resto aritmetico con assegnazione | RemAssign |
& | &expr, &mut expr | Prestito (Borrow) | |
& | &type, &mut type, &'a type, &'a mut type | Type Puntatore a Prestito | |
& | expr & expr | AND Bit per Bit | BitAnd |
&= | var &= expr | AND Bit per Bit con assegnazione | BitAndAssign |
&& | expr && expr | AND logico | |
* | expr * expr | Moltiplicazione aritmetica | Mul |
*= | var *= expr | Moltiplicazione aritmetica con assegnazione | MulAssign |
* | *expr | De-referenziazione | Deref |
* | *const type, *mut type | Puntatore grezzo (Raw pointer) | |
+ | trait + trait, 'a + trait | Vincolo per type composto | |
+ | expr + expr | Addizione aritmetica | Add |
+= | var += expr | Addizione aritmetica con assegnazione | AddAssign |
, | expr, expr | Separatore di argomenti ed elementi | |
- | - expr | Negazione aritmetica | Neg |
- | expr - expr | Sottrazione aritmetica | Sub |
-= | var -= expr | Sottrazione aritmetica con assegnazione | SubAssign |
-> | fn(...) -> type, |…| -> type | Type di ritorno per funzioni e chiusure | |
. | expr.ident | Accesso a campo | |
. | expr.ident(expr, ...) | Chiamata a metodo | |
. | expr.0, expr.1, e così via | Indicizzazione tupla | |
.. | .., expr.., ..expr, expr..expr | Range esclusivo | PartialOrd |
..= | ..=expr, expr..=expr | Range inclusivo | PartialOrd |
.. | ..expr | Aggiornamento struct | |
.. | variant(x, ..), struct_type { x, .. } | “E il resto” con assegnazione tramite pattern | |
... | expr...expr | (Non più utilizzabile, usa ..=) In un pattern: range inclusivo | |
/ | expr / expr | Divisione aritmetica | Div |
/= | var /= expr | Divisione aritmetica con assegnazione | DivAssign |
: | pat: type, ident: type | Vincoli | |
: | ident: expr | Inizializzazione campo di struct | |
: | 'a: loop {...} | Etichetta loop | |
; | expr; | Terminatore di dichiarazioni ed elementi | |
; | [...; len] | Parte della sintassi per vettori a grandezza fissa | |
<< | expr << expr | Shift a sinistra | Shl |
<<= | var <<= expr | Shift a sinistra con assegnazione | ShlAssign |
< | expr < expr | Minore | PartialOrd |
<= | expr <= expr | Minore o uguale | PartialOrd |
= | var = expr, ident = type | Assegnazione/equivalenza | |
== | expr == expr | Comparazione di uguaglianza | PartialEq |
=> | pat => expr | Parte della sintassi del ramo di match | |
> | expr > expr | Maggiore | PartialOrd |
>= | expr >= expr | Maggiore o uguale | PartialOrd |
>> | expr >> expr | Shift a destra | Shr |
>>= | var >>= expr | Shift a destra con assegnazione | ShrAssign |
@ | ident @ pat | Vincolo di Pattern | |
^ | expr ^ expr | OR esclusivo Bit per Bit | BitXor |
^= | var ^= expr | OR esclusivo Bit per Bit con assegnazione | BitXorAssign |
| | pat | pat | Pattern alternativi | |
| | expr | expr | OR Bit per Bit | BitOr |
|= | var |= expr | OR Bit per Bit con assegnazione | BitOrAssign |
|| | expr || expr | OR logico | |
? | expr? | Propagazione errore |
Simboli
La tabella seguente contiene tutti i simboli che non funzionano come operatori, cioè non si comportano come una funzione o una chiamata di metodo.
La Tabella B-2 mostra i simboli che appaiono da soli e sono validi in diverse posizioni.
Tabella B-2: Sintassi stand alone
| Simbolo | Spiegazione |
|---|---|
'ident | Lifetime nominale o etichetta loop |
Numeri immediatamente seguiti da u8, i32, f64, usize, e così via | Letterale numerico di un type specifico |
"..." | Letterale stringa |
r"...", r#"..."#, r##"..."##, e così via | Letterale stringa grezzo, senza elaborazione dei caratteri di escape |
b"..." | Letterale byte di stringa; costituisce un vettore di byte anziché una stringa |
br"...", br#"..."#, br##"..."##, e così via | Letterale byte di stringa grezzo |
'...' | Letterale carattere |
b'...' | Letterale byte ASCII |
|…| expr | Chiusure |
! | Type vuoto per funzioni divergenti |
_ | Pattern “Ignorato” nel ramo di match; usato anche per rendere i letterali più leggibili |
La Tabella B-3 mostra i simboli che vengono usati nel contesto dei percorsi di un elemento nella gerarchia dei moduli.
Tabella B-3: Sintassi relativa ai Percorsi
| Simbolo | Spiegazione |
|---|---|
ident::ident | Nomenclatura percorso |
::path | Percorso relativo alla radice del crate (cioè un percorso assoluto esplicito) |
self::path | Percorso relativo al modulo corrente (cioè un percorso relativo esplicito). |
super::path | Percorso relativo al genitore del modulo corrente |
type::ident, <type as trait>::ident | Costanti, funzioni o type associati |
<type>::... | Elemento associato per un type generico (ad esempio, <&T>::..., <[T]>::..., e così via) |
trait::method(...) | Disambiguare una chiamata a un metodi specificando il trait che lo definisce |
type::method(...) | Disambiguare una chiamata a un metodo specificando il type in cui per cui è definito |
<type as trait>::method(...) | Disambiguare una chiamata a un metodo specificando il trait e il type |
La Tabella B-4 mostra i simboli che appaiono quando si usano type generici come parametri.
Table B-4: Generici
| Simbolo | Spiegazione |
|---|---|
percorso<...> | Specifica parametri a type generici in u n type (per esempio, Vec<u8>) |
percorso::<...>, metodo::<...> | Specifica parametri a type, funzioni o metodi generici in un’espressione; spesso chiamato operatore turbofish (per esempio, "42".parse::<i32>()) |
fn ident<...> ... | Definizione di funzione generica |
struct ident<...> ... | Definizione di struct generica |
enum ident<...> ... | Definizione di enum generica |
impl<...> ... | Definizione di implementazione generica |
for<...> type | Vincolo di lifetime prioritario |
type<ident=type> | Un type generico dove uno o più type associati hanno assegnazioni specifiche (per esempio, Iteratore<Elemento=T>) |
La Tabella B-5 mostra i simboli che appaiono nel contesto della dichiarazioni di type generici come parametri e dei corrispettivi vincoli di trait.
Table B-5: Vincoli di Trait
| Simbolo | Spiegazione |
|---|---|
T: U | Parametro generico T vincolato a type che implementano U |
T: 'a | Type generico type T con longevità 'a (implica che non possa contenere reference con lifetime inferiore ad 'a) |
T: 'static | Type generico T contenente solo reference con longevità infinita |
'b: 'a | Lifetime generica 'b deve essere maggiore di lifetime 'a |
T: ?Sized | Consente a parametri con type generico di essere type a dimensione dinamica |
'a + trait, trait + trait | Definizione di vincolo multiplo |
La Tabella B-6 mostra i simboli utilizzati nell’ambito della invocazione o definizione di macro e degli attributi di un dato elemento.
Table B-6: Macro e Attributi
| Simbolo | Spiegazione |
|---|---|
#[meta] | Attributo esterno |
#![meta] | Attributo interno |
$ident | Sostituzione macro |
$ident:kind | Metavariabile macro |
$(...)... | Ripetizione macro |
ident!(...), ident!{...}, ident![...] | Invocazione macro |
La Tabella B-7 mostra i simboli che creano commenti.
Tabella B-7: Commenti
| Simbolo | Spiegazione |
|---|---|
// | Commento in linea |
//! | Linea interna commento documentazione |
/// | Linea esterna commento documentazione |
/*...*/ | Blocco di commento, commento multi-linea |
/*!...*/ | Blocco interno commento documentazione |
/**...*/ | Blocco esterno commento documentazione |
La Tabella B-8 mostra i contesti in cui sono usate le parentesi tonde.
Table B-8: Parentesi Tonde
| Simbolo | Spiegazione |
|---|---|
() | Tupla vuota (unit), sia letterale che type |
(expr) | Espressione tra parentesi |
(expr,) | Espressione di tupla con singolo elemento |
(type,) | Tupla con singolo type |
(expr, ...) | Espressione tupla |
(type, ...) | Type tupla |
expr(expr, ...) | Espressione di chiamata di funzione; usato anche per inizializzare le varianti struct tupla e enum tupla |
La Tabella B-9 mostra i contesti di utilizzo delle parentesi graffe.
Tabella B-9: Parentesi Graffe
| Contesto | Spiegazione |
|---|---|
{...} | Blocco di codice |
Type {...} | Struct letterali |
La Tabella B-10 mostra i contesti in cui vengono utilizzate le parentesi quadre.
Tabella B-10: Parentesi Quadre
| Contesto | Spiegazione |
|---|---|
[...] | Vettore letterale |
[x; n] | Vettore letterale contenente n copie di x |
[type; n] | Vettore tipizzato contenente n istanze di type |
collezione[i] | Indicizzazione di una collezione; sovrascrivibile (Index, IndexMut) |
expr[..], expr[a..], expr[..b], expr[a..b] | Indicizzazione in collezioni per estrazione slice, usando Range, RangeFrom, RangeTo, o RangeFull come “indici” |