Подтвердить что ты не робот

Могу ли я разрушить кортеж без привязки результата к новой переменной в инструкции let/match/for?

Я хотел бы разрушить кортеж и присвоить часть результата новой переменной и назначить другую часть результата существующей.

Следующий код иллюстрирует намерение (это тупой пример, который приводит к бесконечной печати цикла [0]):

fn main() {
    let mut list = &[0, 1, 2, 3][..];
    while !list.is_empty() {
        let (head, list) = list.split_at(1);
        // An obvious workaround here is to introduce a new variable in the above
        // let statement, and then just assign it to list.
        println!("{:?}", head);
    }
}

Этот код создает новую переменную list вместо ее назначения.

Если я изменил код на следующий (чтобы избежать let, который вводит новую переменную list), она не компилируется:

fn main() {
    let mut list = &[0, 1, 2, 3][..];
    while !list.is_empty() {
        let head;
        (head, list) = list.split_at(1);
        println!("{:?}", head);
    }
}

Ошибка компиляции:

error[E0070]: invalid left-hand side expression
 --> src/main.rs:5:9
  |
5 |         (head, list) = list.split_at(1);
  |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ left-hand of expression not valid

Есть ли способ сделать это, или может ли деструктурирование использоваться только в выражениях let, match и for?

4b9b3361