Sie sind nicht optional. Semikolons ändern das Verhalten einer Ausdrucksanweisung, so dass es eine bewusste Entscheidung sein sollte, ob Sie sie für eine Codezeile verwenden oder nicht.
Fast alles in Rust ist ein Ausdruck. Ein Ausdruck ist etwas, das einen Wert zurückgibt. Wenn Sie ein Semikolon setzen, unterdrücken Sie das Ergebnis dieses Ausdrucks, was in den meisten Fällen das ist, was Sie wollen.
Auf der anderen Seite bedeutet dies, dass das Ergebnis dieses letzten Ausdrucks zurückgegeben wird, wenn Sie Ihre Funktion mit einem Ausdruck ohne Semikolon beenden. Das Gleiche kann für einen Block in einer match
Anweisung angewendet werden.
Sie können Ausdrücke ohne Semikolon verwenden, wo auch immer ein Wert erwartet wird.
Zum Beispiel:
let a = {
let inner = 2;
inner * inner
};
Hier ist der Ausdruck inner * inner
nicht mit einem Semikolon enden, so dass ihr Wert nicht unterdrückt wird. Da es der letzte Ausdruck im Block ist, wird sein Wert zurückgegeben und a
zugewiesen. Wenn Sie in dieser Zeile ein Semikolon setzen, wird der Wert inner * inner
nicht zurückgegeben.
In Ihrem speziellen Fall macht das Unterdrücken des Werts Ihrer let
-Anweisung keinen Sinn, und der Compiler gibt Ihnen zu Recht einen Fehler. Tatsächlich ist let
kein Ausdruck.
Sie können diese https://rustbyexample.com/expression.html auch auf Ausdrücke überprüfen, die Semikolons enthalten. – nbro