Перелічувані типи
Як і кортежі, переліки також можуть бути деструктуровані шляхом зіставлення:
Шаблони також можна використовувати для прив’язки змінних до частин ваших значень. Таким чином ви перевіряєте структуру ваших типів. Давайте розпочнемо з простого типу 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, підтверджуючи що всі випадки оброблено.