Rust 我是否可以在不将结果绑定到let/match/for语句中的新变量的情况下分解元组?

Rust 我是否可以在不将结果绑定到let/match/for语句中的新变量的情况下分解元组?,rust,Rust,我想分解一个元组,将结果的一部分分配给一个新变量,并将结果的另一部分分配给一个现有变量 下面的代码说明了目的(这是一个导致无限循环打印的愚蠢示例[0]): fn main(){ 让mut list=&[0,1,2,3][…]; while!list.is_为空(){ let(head,list)=list.split_在(1)处; //这里一个明显的解决方法是在上面的代码中引入一个新变量 //让语句,然后将其分配给列表。 println!(“{:?}”,头); } } 此代码创建一个新变量列表

我想分解一个元组,将结果的一部分分配给一个新变量,并将结果的另一部分分配给一个现有变量

下面的代码说明了目的(这是一个导致无限循环打印的愚蠢示例
[0]
):

fn main(){
让mut list=&[0,1,2,3][…];
while!list.is_为空(){
let(head,list)=list.split_在(1)处;
//这里一个明显的解决方法是在上面的代码中引入一个新变量
//让语句,然后将其分配给列表。
println!(“{:?}”,头);
}
}
此代码创建一个新变量
列表
,而不是重新分配它

如果我将代码更改为以下内容(以避免引入新的
列表
变量的
let
),则它不会编译:

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

错误[E0070]:赋值的左侧无效
-->src/main.rs:5:22
|
5 |(标题,列表)=列表。在(1)处拆分;
|         ------------ ^
|         |
|无法分配给此表达式
|
有没有办法做到这一点,或者只能在
let
match
语句中使用解构功能?

没有

分解是你只能用模式来做的事情;赋值的左侧不是模式,因此不能分解和赋值

请参阅其中讨论添加此功能的可能性的部分。

Nightly Rust有,它允许您最初尝试按原样编译:

#![特征(分解分配)]
fn main(){
让mut list=&[0,1,2,3][…];
while!list.is_为空(){
让头;
(标题,列表)=列表在(1)处拆分;
println!(“{:?}”,头);
}
}
[0]
[1]
[2]
[3]

但是,我会使用诸如切片模式匹配之类的稳定功能来解决这个问题,这避免了在
split\u和
is\u empty
中重复检查的需要:

fn main(){
让mut list=&[0,1,2,3][…];
而让[头,休息@..]=列表{
println!(“{:?}”,头);
列表=休息;
}
}
另见: