我知道可以在let语句中解构元组和其他内容:
fn foo() -> (u8, u8) {
(1, 2)
}
fn main() {
let (x, y) = foo();
println!("{}, {}", x, y); // prints "1, 2"
}
Run Code Online (Sandbox Code Playgroud)
从 Rust 1.59 开始,我们还可以重用现有的绑定:
fn main() {
let mut x = 0;
let mut y = 0;
println!("{}, {}", x, y); // prints "0, 0"
(x, y) = foo();
println!("{}, {}", x, y); // prints "1, 2"
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种方法可以混合两者,即为模式中的某些变量重新使用现有的绑定,并为其他变量创建新的绑定。类似于以下内容(无法编译):
fn main() {
let mut x = 0;
println!("{}", x);
(x, let y) = foo();
println!("{}, {}", x, y);
}
Run Code Online (Sandbox Code Playgroud)
不,这是不可能的。
它在 RFC 中被概述为未来的可能性,并在此后进行了多次讨论,但 RFC 既没有实施也没有实施。
有两种解决方法:要么使用let声明所有变量并在其后赋值,要么let在赋值之前使用:
// Either:
fn main() {
let mut x = 0;
println!("{}", x);
let y;
(x, y) = foo();
println!("{}, {}", x, y);
}
// Or:
fn main() {
let mut x = 0;
println!("{}", x);
let (x2, y) = foo();
x = x2;
println!("{}, {}", x, y);
}
Run Code Online (Sandbox Code Playgroud)