请问如何将新值转换为可更改的结构引用中的字段?

如何将新值转换为可更改的结构引用中的字段?

我有一个带有字段的结构:

struct A {
    field: SomeType,}

给出&mut A,我如何移动field以新的价值交换?

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_and_set()行动。在这种情况下,我并不担心并发性。



慕田峪9158850
浏览 305回答 2
2回答

蝴蝶刀刀

使用std::mem::swap().fn foo(a: &mut A) {     let mut my_local_var = SomeType::new();     mem::swap(&mut a.field, &mut my_local_var);}或std::mem::replace().fn foo(a: &mut A) {     let mut my_local_var = mem::replace(&mut a.field, SomeType::new());}

有只小跳蛙

如果您的字段恰好是Option,你可以用一个特定的方法-Option::take:struct&nbsp;A&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;field:&nbsp;Option<SomeType>,}fn&nbsp;foo(a:&nbsp;&mut&nbsp;A)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;old&nbsp;=&nbsp;a.field.take(); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;a.field&nbsp;is&nbsp;now&nbsp;None,&nbsp;old&nbsp;is&nbsp;whatever&nbsp;a.field&nbsp;used&nbsp;to&nbsp;be}执行take使用mem::replace,就像更通用的答案显示,但它对你来说是很好的包装:pub&nbsp;fn&nbsp;take(&mut&nbsp;self)&nbsp;->&nbsp;Option<T>&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;mem::replace(self,&nbsp;None)}
打开App,查看更多内容
随时随地看视频慕课网APP