Rust 如何为结构的可变引用中的字段交换新值?

Rust 如何为结构的可变引用中的字段交换新值?,rust,Rust,我有一个带字段的结构: struct A { field: SomeType, } 给定一个&mut a,如何移动字段的值并交换新值 fn foo(a: &mut A) { let mut my_local_var = a.field; a.field = SomeType::new(); // ... // do things with my_local_var // some operations may modify the NE

我有一个带字段的结构:

struct A {
    field: SomeType,
}
给定一个
&mut a
,如何移动
字段的值
并交换新值

fn foo(a: &mut A) {
    let mut my_local_var = a.field;
    a.field = SomeType::new();

    // ...
    // do things with my_local_var
    // some operations may modify the NEW field's value as well.
}
最终目标相当于一个
get\u and\u set()
操作。在这种情况下,我不担心并发性。

使用

或者

使用

或者

如果您的类型实现,则可以使用:

#[派生(默认)]
结构类型;
fn foo(a:&mut a){
让mut my_local_var=std::mem::take(&mut a.field);
}
如果您的字段恰好是一个
选项
,则可以使用一种特定的方法-:

另见:

如果您的类型实现,您可以使用:

#[派生(默认)]
结构类型;
fn foo(a:&mut a){
让mut my_local_var=std::mem::take(&mut a.field);
}
如果您的字段恰好是一个
选项
,则可以使用一种特定的方法-:

另见:


让mut my_local_var=mem::replace(&mut a.field,SomeType::new())。这两者完全相同。或者
让mut my_local_var=mem::replace(&mut a.field,SomeType::new())。这两者完全相同。
fn foo(a: &mut A) {
    let mut my_local_var = SomeType::new();
    mem::swap(&mut a.field, &mut my_local_var);
}
fn foo(a: &mut A) {
    let mut my_local_var = mem::replace(&mut a.field, SomeType::new());
}    
struct A {
    field: Option<SomeType>,
}

fn foo(a: &mut A) {
    let old = a.field.take();
    // a.field is now None, old is whatever a.field used to be
}