Variante ändern, während das Feld in die neue Variante verschoben wird
Ich möchte eine Aufzählungsvariante aktualisieren, während ich ein Feld der alten Variante in die neue verschiebe, ohne zu klonen:
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);
}
}
}
Dies funktioniert nicht, weil wir uns nicht bewegen könnens
von&mut X
.
Bitte schlagen Sie nicht vor, ein @ zu implementiereenum X { X1, X2 }
und mitstruct S { variant: X, str: String }
usw. Dies ist ein vereinfachtes Beispiel. Stellen Sie sich vor, Sie haben viele andere Felder in Varianten und möchten ein Feld von einer Variante in eine andere verschieben.