Result::is_ok_and în Rust

Răspunde cu true dacă rezultatul este Ok și valoarea respectă condiția dată.

Sintaxă
fn is_ok_and(self, f: impl FnOnce(T) -> bool) -> bool

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.