Метод ok_or
Метод ok_or преобразует тип Option в тип Result.
Если исходный Option содержит значение Some,
то метод возвращает Ok с этим значением.
Если же исходный Option равен None,
то метод возвращает Err с переданным аргументом.
Параметром метод принимает значение ошибки,
которое будет использовано в случае отсутствия данных.
Синтаксис
option.ok_or(err)
Пример
Давайте преобразуем значение Some в Result
и выведем результат на экран:
fn main()
{
let opt = Some(5);
let res = opt.ok_or("error");
println!("{:?}", res);
}
Результат выполнения кода:
Ok(5)
Пример
Давайте преобразуем значение None в Result
и выведем результат на экран:
fn main()
{
let opt: Option<i32> = None;
let res = opt.ok_or("error");
println!("{:?}", res);
}
Результат выполнения кода:
Err("error")
Пример
Давайте используем метод ok_or вместе с оператором ?
для возврата ошибки из функции:
fn find_char(s: &str) -> Result<char, String>
{
let res = s.chars().next().ok_or("empty string".to_string())?;
Ok(res)
}
fn main()
{
let res1 = find_char("abcde");
println!("{:?}", res1);
let res2 = find_char("");
println!("{:?}", res2);
}
Результат выполнения кода:
Ok('a')
Err("empty string")
Смотрите также
-
метод
ok_or_else,
который принимает функцию для генерации ошибки -
метод
unwrap,
который извлекает значение из Option -
метод
is_some,
который проверяет, содержит ли Option значение -
метод
map,
который преобразует значение внутри Option