我遇到了以下(简化的)示例:
enum Thing {
A { value: f32 },
B { value: f32 },
}
fn main() {
let mut thing = Thing::A { value: 0. };
let thing_mut_ref = &mut thing;
if let Thing::A {value} = thing_mut_ref {
*thing_mut_ref = Thing::B { value: value * 2.0};
}
}
Run Code Online (Sandbox Code Playgroud)
以下代码无法编译,因为值被捕获为 &mut f32,因此不支持乘以 2.0。
让我惊讶的是,添加ref到匹配的模式突然使其编译,即按值捕获(取消引用value):
enum Thing {
A { value: f32 },
B { value: f32 },
}
fn main() {
let mut thing = Thing::A …Run Code Online (Sandbox Code Playgroud) rust ×1