Перелічувані типи
Як і кортежі, переліки також можуть бути деструктуровані шляхом зіставлення:
Шаблони також можна використовувати для прив’язки змінних до частин ваших значень. Таким чином ви перевіряєте структуру ваших типів. Давайте розпочнемо з простого типу enum:
enum Result {
Ok(i32),
Err(String),
}
fn divide_in_two(n: i32) -> Result {
if n % 2 == 0 {
Result::Ok(n / 2)
} else {
Result::Err(format!("не можна поділити {n} на дві рівні частини"))
}
}
fn main() {
let n = 100;
match divide_in_two(n) {
Result::Ok(half) => println!("{n} поділена навпіл, це {half}"),
Result::Err(msg) => println!("вибачте, сталася помилка: {msg}"),
}
}
Тут ми використали гілки для деструктурування значення Result. У першій гілці half прив’язано до значення всередині варіанту Ok. У другій гілці msg прив’язано до повідомлення про помилку.
This slide should take about 4 minutes.
- Вираз
if/elseповертає перелік, який пізніше розпаковується за допомогоюmatch. - Ви можете спробувати додати третій варіант до визначення переліку і відобразити помилки під час виконання коду. Вкажіть місця, де ваш код зараз є невичерпним, і як компілятор намагається дати вам підказки.
- Доступ до значень у варіантах переліку можливий лише після зіставлення з шаблоном.
- Продемонструйте, що відбувається, коли пошук є невичерпним. Зверніть увагу на перевагу, яку надає компілятор Rust, підтверджуючи що всі випадки оброблено.