Ce face Option::unwrap
unwrap() returnează valoarea din Some(x). Dacă opțiunea este None, programul se oprește imediat cu o panică și mesajul called `Option::unwrap()` on a `None` value.
expect("mesaj") face exact același lucru, dar la panică afișează mesajul tău. Este preferat lui unwrap(), pentru că explică de ce te așteptai să existe o valoare și ușurează găsirea problemei.
Folosește-le doar când lipsa valorii ar fi o greșeală de programare (de exemplu, o constantă pe care tu ai scris-o corect) sau în exemple și teste. Pentru date venite de la utilizator, din fișiere sau din rețea, tratează cazul None cu match, unwrap_or sau ?.
Parametri
| Parametru | Descriere |
|---|---|
msg |
Doar la expect: textul afișat dacă valoarea lipsește. Descrie ce te așteptai să fie adevărat. |
Ce returnează
Valoarea de tip T din Some. Pentru None nu returnează: programul intră în panică.
Exemple
Exemplul 1: Când valoarea există
Vectorul nu este gol, deci max() dă sigur Some. expect documentează această presupunere.
fn main() {
let note = [7, 10, 9];
let maxima = note.iter().max().expect("vectorul de note nu este gol");
println!("Nota maximă: {maxima}");
let pret: Option<f64> = Some(49.5);
println!("Preț: {} lei", pret.unwrap());
}
Rezultat
Nota maximă: 10
Preț: 49.5 lei
Exemplul 2: Panica pentru None
Al doilea apel găsește None, iar expect oprește programul. Ultima linie nu se mai execută. Numărul din paranteză după 'main' este identificatorul firului și diferă la fiecare rulare.
fn cauta_nota(nume: &str) -> Option<u8> {
if nume == "Ana" {
Some(10)
} else {
None
}
}
fn main() {
let nota = cauta_nota("Ana").expect("Elevul trebuie să existe în catalog");
println!("Ana: {nota}");
let alta = cauta_nota("Dan").expect("Elevul trebuie să existe în catalog");
println!("Dan: {alta}");
}
Rezultat (programul se oprește cu panică, codul de ieșire 101)
Ana: 10
thread 'main' (48213) panicked at src/main.rs:13:34:
Elevul trebuie să existe în catalog
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Greșeli frecvente
- Folosești
unwrap()pe date de la utilizator. Orice intrare neașteptată oprește programul. TrateazăNoneexplicit. - Scrii în
expectce s-a întâmplat ("nu am găsit") în loc de ce te așteptai ("elevul trebuie să existe"). Convenția Rust este a doua variantă. - Crezi că panica poate fi ignorată ca o excepție. O panică pe firul principal oprește programul cu codul de ieșire 101.
Comenzi înrudite
Option: Tipul care spune „poate există o valoare, poate nu”: Some(valoare) sau None, în locul lui null din alte limbaje.Option::unwrap_or: Scoate valoarea din Some sau, pentru None, folosește o valoare de rezervă: fixă, calculată de o funcție sau implicită.Result::unwrap: Scoate valoarea din Ok; pentru Err oprește programul cu panică. unwrap_err face invers: scoate eroarea.panic::catch_unwind: Rulează o funcție și prinde panica ei, returnând Err în loc să oprească programul.