W Rust uważam, że idiomatycznym sposobem radzenia sobie z możliwymi do naprawienia błędami jest użycie wyniku. Na przykład funkcja ta wyraźnie jest idiomatyczne:Jaki jest idiomatyczny sposób zwracania błędu z funkcji bez wyniku, jeśli zakończy się powodzeniem?
fn do_work() -> Result<u64, WorkError> {...}
Oczywiście, istnieją również funkcje, które mają jedną, oczywistą, stan awarii i dlatego używają typu opcji zamiast. Idiomatyczny przykład to:
fn do_work() -> Option<u64>
Wszystko to jest bezpośrednio omówione w dokumentacji. Jestem jednak zdezorientowany przypadkiem, w którym funkcja może się nie powieść, ale nie ma znaczącej wartości, gdy się powiedzie. Porównaj dwa następujące funkcje:
fn do_work() -> Option<WorkError>
// vs
fn do_work() -> Result<(), WorkError>
ja po prostu nie jestem pewien, który jeden z nich jest bardziej idiomatyczne, czy jest używana częściej w świecie rzeczywistym kodzie Rust. Moim głównym źródłem pytań na ten temat jest książka "Rdza", ale nie sądzę, że jest to omówione w sekcji "Error Handling". Nie miałem też szczęścia w żadnej innej dokumentacji Rusta.
Oczywiście wydaje się to dość subiektywne, ale szukam autorytatywnych źródeł, które stwierdzają, która forma jest idiomatyczna, lub dlaczego jedna forma jest lepsza (lub gorsza) od drugiej. (Jestem także ciekawy, jak konwencja jest porównywana z innymi językami, które w dużym stopniu wykorzystują "błędy jako wartości", takie jak Go i Haskell.)
Jestem z 'Result <(), Error>' strony rzeczy .. Zazwyczaj pseudonimem te są również moje własne typy. Chciałbym usłyszeć, co mówią inni. Robię to jednak, ponieważ makra 'try!' Nadal bardzo dobrze z nim grają. –