In Rust, credo che il modo idiomatico per gestire gli errori recuperabili sia utilizzare Result. Ad esempio questa funzione è chiaramente idiomatica:Qual è il modo idiomatico per restituire un errore da una funzione senza risultato se ha esito positivo?
fn do_work() -> Result<u64, WorkError> {...}
Naturalmente, ci sono anche funzioni che hanno un unico, evidente, stato di avaria, e quindi utilizzano il tipo di opzione. Un esempio idiomatico sarebbe questo:
fn do_work() -> Option<u64>
Tutto questo è indirizzato direttamente nella documentazione. Tuttavia, sono confuso sul caso in cui una funzione può fallire, ma non ha alcun valore significativo quando ha successo. Confrontare le seguenti due funzioni:
fn do_work() -> Option<WorkError>
// vs
fn do_work() -> Result<(), WorkError>
Non sono solo sicuro che uno di questi è più idiomatica, o è usato più spesso nel codice Rust mondo reale. La mia risorsa go-to per domande come questa è il libro Rust, ma non penso che questo sia affrontato nella sua sezione "Error Handling". Nemmeno io ho avuto molta fortuna con nessun'altra documentazione di Rust.
Ovviamente questo sembra piuttosto soggettivo, ma sto cercando fonti autorevoli che stabiliscano quale forma sia idiomatica, o sul perché una forma sia superiore (o inferiore) all'altra. (Sono anche curioso di sapere come la convenzione paragona ad altre lingue che utilizzano pesantemente "errori come valori", come Go e Haskell.)
Io sono del lato 'Risultato <(), Error> '. Di solito li alias anche come miei tipi. Sarei interessato a sapere cosa dicono gli altri. Lo faccio anche perché la macro 'try!' Funziona ancora molto bene con esso. –