Метод 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