Тип Result в Rust
Тип Result с двумя параметрами описывает
либо удачный ответ, либо описание сбоя.
Первый параметр - тип полезных данных,
второй - тип текста или другого значения
для неудачи. Исход либо несет результат,
либо несет описание того, что не удалось.
Удачный вариант пишут как Ok со
значением внутри скобок. Неудачный - как
Err с текстом или другим значением
сбоя. Для целого числа и строки сбоя тип
выглядит так:
fn main() {
let good: Result<i32, String> = Ok(7);
let bad: Result<i32, String> = Err(String::from("empty"));
println!("{:?}", good);
println!("{:?}", bad);
}
Функция может вернуть любой из двух вариантов в зависимости от входных данных:
fn half(n: i32) -> Result<i32, String> {
if n % 2 == 0 {
Ok(n / 2)
} else {
Err(String::from("odd"))
}
}
fn main() {
let a = half(8);
let b = half(5);
println!("{:?}", a);
println!("{:?}", b);
}
Дан следующий код:
let step: Result<i32, String> = Ok(3);
Запишите рядом переменную stop того
же типа с вариантом сбоя и текстом
"halt".
Дан следующий код:
fn pick(n: i32) -> Result<i32, String> {
if n > 0 {
Ok(n)
} else {
Err(String::from("small"))
}
}
В main получите два результата
pick для 4 и 0
и выведите оба через println!
с {:?}.
Скажите, какой вариант Result несет
полезное число, а какой - описание сбоя
в примере с half.