Ce face Result::ok
ok() dă Some(v) pentru Ok(v) și None pentru Err: motivul erorii se pierde. Este util când nu te interesează de ce a eșuat o operație, doar dacă a reușit, de exemplu la filtrarea textelor care sunt numere valide.
err() face invers: Some(e) pentru Err(e) și None pentru Ok. Este util pentru a aduna doar erorile dintr-o listă de rezultate.
Ce returnează
Option<T> (la ok) sau Option<E> (la err).
Exemple
Exemplul 1: Păstrează doar numerele valide
filter_map păstrează elementele pentru care funcția dă Some; ok() face trecerea de la Result la Option.
fn main() {
let intrari = ["10", "abc", "7", "", "9"];
let note: Vec<u8> = intrari.iter().filter_map(|t| t.parse().ok()).collect();
println!("note valide: {note:?}");
}
Rezultat
note valide: [10, 7, 9]
Exemplul 2: Adună erorile cu err()
fn main() {
let intrari = ["10", "abc", "7", "-"];
let erori: Vec<String> = intrari
.iter()
.filter_map(|t| t.parse::<u8>().err().map(|e| format!("{t:?}: {e}")))
.collect();
for e in &erori {
println!("{e}");
}
println!("{:?}", "5".parse::<u8>().err());
}
Rezultat
"abc": invalid digit found in string
"-": invalid digit found in string
None
Greșeli frecvente
- Folosești
ok()când utilizatorul ar avea nevoie să afle de ce a eșuat operația: mesajul erorii se pierde.
Comenzi înrudite
Option::ok_or: Transformă un Option în Result: Some(x) devine Ok(x), iar None devine Err cu eroarea dată.Result::unwrap_or: Scoate valoarea din Ok sau, la eroare, folosește o valoare de rezervă: fixă, calculată din eroare sau implicită.Result::iter: Un iterator cu valoarea din Ok (un element) sau gol pentru Err; la colectare, Result oprește la prima eroare.Result: Tipul pentru operații care pot eșua: Ok(valoare) la succes sau Err(eroare) cu motivul eșecului.