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()
操作。在这种情况下,我并不担心并发。#1 楼
使用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());
}
#2 楼
如果您的类型实现Default
,则可以使用std::mem::take
: #[derive(Default)]
struct SomeType;
fn foo(a: &mut A) {
let mut my_local_var = std::mem::take(&mut a.field);
}
如果您的字段碰巧是一个
Option
,您可以使用一种特定的方法— Option::take
:qbr1203为您精心包装: Option::take
评论
或者让mut my_local_var = mem :: replace(&mut a.field,SomeType :: new());。两者完全相等。
–克里斯·摩根(Chris Morgan)
2014年11月24日6:25