Метод unwrap_or_else
Метод unwrap_or_else извлекает значение
из Option или Result. Если значение
присутствует (Some или Ok), метод
возвращает его. Если значения нет (None или
Err), метод вызывает переданное замыкание
и возвращает его результат. Параметром метод
принимает замыкание без аргументов, которое
вычисляет альтернативное значение.
Синтаксис
option.unwrap_or_else(|| default_value)
result.unwrap_or_else(|err| default_value)
Пример
Давайте извлечем значение из Some и из
None, используя unwrap_or_else:
fn main()
{
let some_value: Option<i32> = Some(12345);
let none_value: Option<i32> = None;
let res1 = some_value.unwrap_or_else(|| 0);
let res2 = none_value.unwrap_or_else(|| 0);
println!("{}", res1);
println!("{}", res2);
}
Результат выполнения кода:
12345
0
Пример
Давайте извлечем значение из Ok и из
Err, используя unwrap_or_else:
fn main()
{
let ok_value: Result<i32, &str> = Ok(12345);
let err_value: Result<i32, &str> = Err("error");
let res1 = ok_value.unwrap_or_else(|_| 0);
let res2 = err_value.unwrap_or_else(|_| 0);
println!("{}", res1);
println!("{}", res2);
}
Результат выполнения кода:
12345
0
Пример
Давайте используем ошибку внутри замыкания для формирования альтернативного значения:
fn main()
{
let err_value: Result<i32, &str> = Err("abcde");
let res = err_value.unwrap_or_else(|e| {
println!("Error: {}", e);
0
});
println!("{}", res);
}
Результат выполнения кода:
Error: abcde
0
Смотрите также
-
метод
unwrap,
который извлекает значение или вызывает панику -
метод
unwrap_or,
который возвращает значение или заданное значение по умолчанию -
метод
unwrap_or_default,
который возвращает значение или значение по умолчанию типа -
метод
expect,
который извлекает значение или вызывает панику с сообщением