Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Деструктуризация

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 также поддерживает использование шаблонов в условных выражениях, позволяя одновременно выполнять сравнение на равенство и деструктуризацию. Этот вариант использования шаблонов подробно рассматривается позднее.
  • Отредактируйте пример, чтобы показать ошибку компиляции, когда шаблон не соответствует сопоставляемому значению.