Alterar variante de enumeração ao mover o campo para a nova variante
Quero atualizar uma variante enum ao mover um campo da antiga variante para a nova sem clonagem:
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);
}
}
}
Isso não funciona porque não podemos nos movers
de&mut X
.
Por favor, não sugira coisas como implementar umenum X { X1, X2 }
e usandostruct S { variant: X, str: String }
etc. Este é um exemplo simplificado, imagine ter muitos outros campos em variantes e desejar mover um campo de uma variante para outra.