Ich lese die Dokumentation fürFile
:
//..
let mut file = File::create("foo.txt")?;
//..
Was ist das ?
in dieser Zeile? Ich kann mich nicht erinnern, es zuvor im Rust Book gesehen zu haben.
Ich lese die Dokumentation fürFile
:
//..
let mut file = File::create("foo.txt")?;
//..
Was ist das ?
in dieser Zeile? Ich kann mich nicht erinnern, es zuvor im Rust Book gesehen zu haben.
Antworten:
Wie Sie vielleicht bemerkt haben, hat Rust keine Ausnahmen. Es gibt Panik, aber ihre Funktionalität ist eingeschränkt (sie können keine strukturierten Informationen enthalten) und von ihrer Verwendung zur Fehlerbehandlung wird abgeraten (sie sind für nicht behebbare Fehler gedacht).
In Rust wird die Fehlerbehandlung verwendet
Result
. Ein typisches Beispiel wäre:Das ist großartig, weil:
Es ist jedoch weniger als ideal, da es sehr ausführlich ist. Hier kommt der Fragezeichenoperator ins Spiel
?
.Das Obige kann wie folgt umgeschrieben werden:
das ist viel prägnanter.
Was
?
hier geschieht, entspricht dermatch
obigen Aussage. Kurz gesagt: Es entpackt dasResult
if OK und gibt den Fehler zurück, wenn nicht.Es ist ein bisschen magisch, aber die Fehlerbehandlung erfordert etwas Magie, um das Boilerplate zu reduzieren, und im Gegensatz zu Ausnahmen ist sofort ersichtlich, welche Funktionsaufrufe fehlerhaft sein können oder nicht: diejenigen, die mit geschmückt sind
?
.Ein Beispiel für die Magie ist, dass dies auch funktioniert für
Option
:Dies wird durch das (instabile)
Try
Merkmal angetrieben .Siehe auch:
quelle
Result
oderOption
.