Rust中能否在解构赋值中混合复用已有绑定与创建新绑定?
Rust中能否混合复用已有绑定与创建新绑定的解构?
Rust稳定版目前并不支持你示例中(x, let y) = foo();这种混合复用已有绑定、同时创建新绑定的解构语法,但有几种简单的替代方案可以实现相同的效果:
方案一:先解构再赋值
先通过let解构元组得到全部新变量,再将需要的部分赋值给已有绑定:
fn foo() -> (u8, u8) { (1, 2) } fn main() { let mut x = 0; println!("{}", x); let (new_x, y) = foo(); x = new_x; println!("{}, {}", x, y); }
这种方式逻辑直白,适合简单场景,不需要额外语法技巧。
方案二:使用match表达式
利用match的模式匹配能力,在分支里同时完成已有变量的赋值和新变量的绑定:
fn foo() -> (u8, u8) { (1, 2) } fn main() { let mut x = 0; println!("{}", x); match foo() { (val, y) => { x = val; println!("{}, {}", x, y); } } }
这种写法更紧凑,避免了额外的临时变量命名,代码可读性也不错。
目前Rust尚未将混合解构赋值与新绑定的语法纳入稳定版,上述两种方案是当前最常用的替代方式。
内容的提问来源于stack exchange,提问作者Florian Brucker
相关产品推荐
相关产品推荐

