Если ваше поле является Option
, существует специальный метод, который вы можете использовать - 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
}
Реализация take
использует mem::replace
, как и , более общий ответ показывает , но он отлично обернут для вас:
pub fn take(&mut self) -> Option {
mem::replace(self, None)
}