Çoklu Hata Tipleri
Önceki örnekler oldukça rahattı; Bir Resultın bir başka Result ile etkileşimi ve bir Optionın başka bir Option ile etkileşimi gibiydi.
Bazen bir Option diğer bir Result ile etkileşim kurmak zorundadır, ya da
Result<T, Error1>, Result<T, Error2> ile. Tüm bu durumlarda, farklı hata türlerimizi, birleştirilebilir ve etkileşimi kolay hale getirecek şekilde yönetmek istiyoruz.
Takip eden örnekte, iki unwrap örneği farklı hata tipleri oluşturur. parse::<i32> bir
Result<i32, ParseIntError> döndürürken,Vec::first bir Option döndürür:
fn double_first(vec: Vec<&str>) -> i32 { let first = vec.first().unwrap(); // error 1'i oluşturur 2 * first.parse::<i32>().unwrap() // error 2'yi oluşturur } fn main() { let numbers = vec!["42", "93", "18"]; let empty = vec![]; let strings = vec!["tofu", "93", "18"]; println!("The first doubled is {}", double_first(numbers)); println!("The first doubled is {}", double_first(empty)); // Error 1: girdi vector'ü boş println!("The first doubled is {}", double_first(strings)); // Error 2: öğe sayıya ayrıştırılamaz }
İlerleyen bölümlerde, bu tip problemler için birkaç stratejileri ele alacağız.