In Rust glaube ich, dass die idiomatische Methode, mit behebbaren Fehlern umzugehen, Ergebnis ist. Zum Beispiel ist diese Funktion eindeutig idiomatische:Was ist der idiomatische Weg, um einen Fehler von einer Funktion ohne Ergebnis zurückzugeben, wenn erfolgreich?
fn do_work() -> Result<u64, WorkError> {...}
Natürlich gibt es auch Funktionen, die einen einzelnen, klar, Fehlerzustand haben, und daher die Option Typ stattdessen verwenden. Ein idiomatisches Beispiel wäre dies:
fn do_work() -> Option<u64>
Das alles ist ohne weiteres in der Dokumentation behandelt. Ich bin jedoch verwirrt über den Fall, in dem eine Funktion fehlschlagen kann, hat aber keinen sinnvollen Wert, wenn sie erfolgreich ist. Vergleichen Sie die folgenden zwei Funktionen:
fn do_work() -> Option<WorkError>
// vs
fn do_work() -> Result<(), WorkError>
Ich bin nur nicht sicher, welche eine von diesen mehr idiomatische ist oder häufiger in der realen Welt Rust-Code verwendet. Meine Anlaufstelle für Fragen wie diese ist das Rust-Buch, aber ich glaube nicht, dass dies in der Rubrik "Error Handling" angesprochen wird. Ich habe auch mit keiner anderen Rust-Dokumentation viel Glück gehabt.
Natürlich scheint das ziemlich subjektiv, aber ich suche nach autoritativen Quellen, die entweder angeben, welche Form idiomatisch ist, oder warum eine Form der anderen überlegen (oder schlechter) ist. (Ich bin auch neugierig, wie die Konvention im Vergleich zu anderen Sprachen, die "Fehler als Werte", wie Go und Haskell verwenden.)
Ich bin der 'Ergebnis <(), Error>' Seite der Dinge .. Ich alias diese auch als meine eigenen Typen. Ich würde gerne hören, was andere sagen. Ich mache das aber, weil das 'try!' Makro immer noch sehr gut damit spielt. –