小编Ale*_*ngs的帖子

为什么“ref”会导致此示例*取消引用*一个字段?

我遇到了以下(简化的)示例:

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

3
推荐指数
1
解决办法
77
查看次数

标签 统计

rust ×1