E0502E0502 — Ausleihe als veränderlich nicht möglich, da bereits unveränderlich ausgeliehen
Ein Wert kann nicht veränderlich ausgeliehen werden, solange eine unveränderliche Ausleihe noch aktiv ist.
Was verursacht diesen Fehler
Rust erzwingt, dass gleichzeitig keine veränderliche und unveränderliche Referenz auf dieselben Daten existieren darf. Die unveränderliche Ausleihe ist noch aktiv, wenn versucht wird, eine veränderliche Ausleihe zu nehmen.
So beheben Sie ihn
Strukturieren Sie den Code so um, dass die unveränderliche Ausleihe endet, bevor die veränderliche Ausleihe beginnt. Klonen Sie die Daten, wenn Sie unabhängige Kopien benötigen. Begrenzen Sie den Gültigkeitsbereich der unveränderlichen Ausleihe mit einem Block.
Beispiel
let mut v = vec![1, 2];
let r = &v[0];
v.push(3);
println!("{}", r);Verwandte Fehlercodes
E0599E0599 — Keine Methode X für Typ gefunden
Die Methode existiert nicht für den angegebenen Typ, oder das erforderliche Trait ist nicht im Gültigkeitsbereich.
E0597E0597 — Ausgeliehener Wert lebt nicht lang genug
Eine Referenz überdauert die Daten, auf die sie zeigt.
E0133E0133 — Aufruf einer unsicheren Funktion erfordert einen unsafe-Block
Eine unsichere Funktion oder Operation wird außerhalb eines unsafe-Blocks verwendet.
E0308E0308 — Nicht übereinstimmende Typen in Match-Armen
Verschiedene Match-Arme geben inkompatible Typen zurück.
E0384E0384 — Zweimalige Zuweisung an unveränderliche Variable nicht möglich
Eine Variable wird neu zugewiesen, wurde aber nicht als veränderlich deklariert.
E0200E0200 — Unsicheres Trait erfordert unsafe impl
Ein unsicheres Trait muss mit einem unsafe impl-Block implementiert werden.