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.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage