Неясно, насколько хорошо вы следите за общей проблемой, но, по сути, вы не можете присвоить значение self.attrib
, если оно все еще принадлежит self.next_atrrib
.Это означает, что вам нужно удалить значение из self.next_attrib
, а затем передать право владения self.attrib
.
Один из способов сделать это - заменить значение вручную.Например, вы можете использовать std::mem::replace
:
impl SomeStruct {
pub fn apply_changes(&mut self) {
let next_attrib = std::mem::replace(&mut self.next_attrib, None);
if let Some(se) = next_attrib {
self.attrib = se;
}
}
}
, чтобы заменить значение на None
и стать владельцем текущего значения как next_attrib
.Затем вы можете взять значение и, если оно равно Some(_)
, вы можете поместить его содержимое в self.attrib
.
Так как это довольно распространенный шаблон, в Option
есть функция полезности.чтобы справиться с ситуациями, когда вы хотите стать владельцем содержимого Option
и установить для Option
значение None
.Option::take
- это то, что вам нужно.
impl SomeStruct {
pub fn apply_changes(&mut self) {
if let Some(se) = self.next_attrib.take() {
self.attrib = se;
}
}
}