Ce face Result::is_ok_and
is_ok_and(|v| condiție) combină două verificări: a reușit operația și valoarea este cea dorită? Pentru Err, răspunsul este mereu false, iar funcția nu este apelată.
Există și perechea is_err_and(|e| ...), care verifică eroarea, de exemplu tipul ei (e.kind() == ErrorKind::NotFound).
Parametri
| Parametru | Descriere |
|---|---|
f |
Condiția verificată pe valoarea din Ok. |
Ce returnează
bool.
Exemple
Exemplul 1: Este un număr par?
fn main() {
for t in ["14", "7", "paisprezece"] {
let par = t.parse::<i32>().is_ok_and(|n| n % 2 == 0);
println!("{t:?} este număr par: {par}");
}
}
Rezultat
"14" este număr par: true
"7" este număr par: false
"paisprezece" este număr par: false
Exemplul 2: Verificarea unei erori cu is_err_and
Fișierul nu există în directorul exemplului, deci eroarea are tipul NotFound.
use std::fs;
use std::io::ErrorKind;
fn main() {
let r = fs::read_to_string("lipsa.txt");
let lipseste = r.is_err_and(|e| e.kind() == ErrorKind::NotFound);
println!("fișierul lipsește: {lipseste}");
}
Rezultat
fișierul lipsește: true
Greșeli frecvente
- Metoda consumă rezultatul. Dacă ai nevoie de el și după, apelează-o pe
r.as_ref().
Comenzi înrudite
Option::filter: filter păstrează valoarea doar dacă respectă o condiție; is_some_and întreabă direct dacă există și respectă condiția.Result: Tipul pentru operații care pot eșua: Ok(valoare) la succes sau Err(eroare) cu motivul eșecului.io::Error: Eroarea operațiilor de intrare/ieșire; kind() dă categoria (NotFound, PermissionDenied…), iar new() creează una proprie.