I have a struct with a field:
struct A {
field: SomeType,
}
Given a &mut A
, how can I move the value of field
If your type implements Default, you can use std::mem::take:
#[derive(Default)]
struct SomeType;
fn foo(a: &mut A) {
let mut my_local_var = std::mem::take(&mut a.field);
}
If your field happens to be an Option
, there's a specific method you can use — Option::take:
struct A {
field: Option,
}
fn foo(a: &mut A) {
let old = a.field.take();
// a.field is now None, old is whatever a.field used to be
}
The implementation of Option::take uses mem::take
, just like the more generic answer above shows, but it is wrapped up nicely for you:
pub fn take(&mut self) -> Option {
mem::take(self)
}