Деструктуризация
Rust поддерживает сопоставление с образцом, чтобы разбить большое значение, например кортеж, на составные части:
// Copyright 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0
fn check_order(tuple: (i32, i32, i32)) -> bool {
let (left, middle, right) = tuple;
left < middle && middle < right
}
fn main() {
let tuple = (1, 5, 3);
println!(
"{tuple:?}: {}",
if check_order(tuple) { "ordered" } else { "unordered" }
);
}
This slide should take about 5 minutes.
- Используемые здесь шаблоны являются «неопровержимыми», то есть компилятор может статически проверить, что значение справа от
=имеет ту же структуру, что и шаблон. - Имя переменной – это неопровержимый шаблон, который всегда соответствует любому значению, отсюда возможность использовать
letдля объявления единственной переменной. - Rust также поддерживает использование шаблонов в условных выражениях, позволяя одновременно выполнять сравнение на равенство и деструктуризацию. Этот вариант использования шаблонов подробно рассматривается позднее.
- Отредактируйте пример, чтобы показать ошибку компиляции, когда шаблон не соответствует сопоставляемому значению.