Изменить вариант перечисления при перемещении поля в новый вариант
Я хочу обновить перечислимый вариант при перемещении поля старого варианта на новое без клонирования:
enum X {
X1(String),
X2(String),
}
fn increment_x(x: &mut X) {
match x {
&mut X::X1(s) => {
*x = X::X2(s);
}
&mut X::X2(s) => {
*x = X::X1(s);
}
}
}
Это не работает, потому что мы не можем двигатьсяs
от&mut X
.
Пожалуйста, не предлагайте такие вещи, как реализацияenum X { X1, X2 }
и используяstruct S { variant: X, str: String }
и т. д. Это упрощенный пример, представьте, что у вас есть много других полей в вариантах и вы хотите переместить одно поле из одного варианта в другой.