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!(“{:?}”,头);
列表=休息;
}
}
另见: