Ce face Result::unwrap
unwrap() returnează valoarea din Ok. Dacă rezultatul este Err(e), programul intră în panică și afișează eroarea cu {:?}. expect("mesaj") face la fel, dar pune mesajul tău înaintea erorii.
unwrap_err() este opusul: returnează eroarea din Err și intră în panică pentru Ok. Se folosește mai ales în teste, ca să verifici ce eroare a apărut.
Ca și la Option, folosește-le doar când eșecul ar fi o greșeală de programare. Pentru erori care pot apărea în mod normal, tratează-le sau trimite-le mai departe cu ?.
Parametri
| Parametru | Descriere |
|---|---|
msg |
La expect: textul afișat la panică, înaintea erorii. |
Ce returnează
unwrap/expect: valoarea T din Ok. unwrap_err: eroarea E din Err.
Exemple
Exemplul 1: unwrap, expect și unwrap_err pe valori sigure
Textele sunt scrise de noi, deci știm dinainte rezultatul. unwrap_err scoate eroarea pentru textul invalid.
fn main() {
let an: u32 = "2026".parse().unwrap();
let luna: u32 = "10".parse().expect("luna este un număr scris corect în cod");
println!("an = {an}, lună = {luna}");
let eroare = "zece".parse::<u32>().unwrap_err();
println!("eroare = {eroare}");
}
Rezultat
an = 2026, lună = 10
eroare = invalid digit found in string
Exemplul 2: Panica pentru Err
Mesajul de la expect este urmat de două puncte și de eroare, afișată cu {:?}.
fn main() {
let text = "12,50";
let pret: f64 = text.parse().expect("Prețul din fișier trebuie să fie un număr");
println!("{pret}");
}
Rezultat (programul se oprește cu panică, codul de ieșire 101)
thread 'main' (51870) panicked at src/main.rs:3:34:
Prețul din fișier trebuie să fie un număr: ParseFloatError { kind: Invalid }
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Greșeli frecvente
- Scrii
"12,50".parse::<f64>(): Rust folosește punctul zecimal, deci rezultatul esteErr. Înlocuiește virgula cureplace(',', ".")înainte. - Folosești
unwrap()peste tot și programul se oprește la prima eroare de intrare. Foloseștematchsau?pentru erori așteptate. - Apelezi
unwrap()pe unResultal cărui tip de eroare nu implementeazăDebug: nu compilează.
Comenzi înrudite
Result: Tipul pentru operații care pot eșua: Ok(valoare) la succes sau Err(eroare) cu motivul eșecului.Result::unwrap_or: Scoate valoarea din Ok sau, la eroare, folosește o valoare de rezervă: fixă, calculată din eroare sau implicită.Option::unwrap: Scoate valoarea din Some; pentru None programul se oprește cu panică. expect face la fel, cu mesajul tău.panic::catch_unwind: Rulează o funcție și prinde panica ei, returnând Err în loc să oprească programul.