Non sono opzionali. I punti e virgola modificano il comportamento di un'espressione di espressione in modo che dovrebbe essere una decisione consapevole se li si utilizza o meno per una riga di codice.
Quasi tutto in Rust è un'espressione. Un'espressione è qualcosa che restituisce un valore. Se metti un punto e virgola stai sopprimendo il risultato di questa espressione, che nella maggior parte dei casi è ciò che desideri.
D'altra parte, ciò significa che se si termina la propria funzione con un'espressione senza punto e virgola, verrà restituito il risultato di quest'ultima espressione. Lo stesso può essere applicato per un blocco in un'istruzione match
.
È possibile utilizzare le espressioni senza punto e virgola in qualsiasi altro punto in cui è previsto un valore.
Ad esempio:
let a = {
let inner = 2;
inner * inner
};
Qui l'espressione inner * inner
non termina con una virgola, quindi il suo valore non è soppressa. Poiché è l'ultima espressione nel blocco, il suo valore verrà restituito e assegnato a a
. Se si inserisce un punto e virgola su questa stessa riga, il valore di inner * inner
non verrà restituito.
Nel tuo caso specifico, non eliminare il valore della tua istruzione let
non ha senso e il compilatore ti dà giustamente un errore. Infatti, let
non è un'espressione.
È anche possibile controllare questo https://rustbyexample.com/expression.html su espressioni che menzionano anche punti e virgola. – nbro