РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
601 of 1245 menu

Метод inspect класса Result

Метод inspect вызывается у значения типа Result и позволяет заглянуть внутрь варианта Ok, выполнив некоторое действие с ссылкой на содержащееся там значение. При этом сам объект Result не потребляется и не изменяется: метод возвращает его обратно без изменений, что удобно для встраивания в цепочки вызовов. Параметром метод принимает замыкание, которое получает ссылку на значение внутри Ok. Если же у нас вариант Err, то замыкание не вызывается, а значение просто передаётся дальше.

Синтаксис

result.inspect(f)

Пример

Давайте посмотрим, как метод inspect работает с вариантом Ok. Выведем значение внутри Ok на экран, не изменяя сам Result:

fn main() { let res: Result<i32, &str> = Ok(12345); let res = res.inspect(|value| { println!("inspect: {}", value); }); println!("{:?}", res); }

Результат выполнения кода:

inspect: 12345 Ok(12345)

Пример

А теперь давайте проверим, что будет, если у нас вариант Err. В этом случае замыкание не должно вызываться:

fn main() { let res: Result<i32, &str> = Err("error"); let res = res.inspect(|value| { println!("inspect: {}", value); }); println!("{:?}", res); }

Результат выполнения кода:

Err("error")

Пример

Метод inspect удобно использовать в цепочках вызовов для логирования промежуточных результатов:

fn main() { let res = Ok::<i32, &str>(12345) .inspect(|value| println!("step 1: {}", value)) .map(|value| value * 2) .inspect(|value| println!("step 2: {}", value)); println!("{:?}", res); }

Результат выполнения кода:

step 1: 12345 step 2: 24690 Ok(24690)

Смотрите также

  • метод inspect_err,
    который выполняет побочный эффект для варианта Err
  • метод map,
    который преобразует значение внутри Ok
  • метод map_err,
    который преобразует значение внутри Err
  • метод and_then,
    который применяет функцию к значению внутри Ok и возвращает новый Result
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить