E0502E0502 — Nie można pożyczyć jako mutowalnego, bo już pożyczono jako niemutowalny
Wartość nie może być pożyczona mutowalnie, gdy aktywne jest jeszcze niemutowalne pożyczenie.
Co powoduje ten błąd
Rust wymusza, że nie można jednocześnie posiadać mutowalnej i niemutowalnej referencji do tych samych danych. Niemutowalne pożyczenie jest nadal aktywne w momencie, gdy próbujesz pobrać mutowalne.
Jak to naprawić
Przepisz kod tak, by niemutowalne pożyczenie kończyło się przed rozpoczęciem mutowalnego. Sklonuj dane, jeśli potrzebujesz niezależnych kopii. Ogranicz zasięg niemutowalnego pożyczenia blokiem.
Przykład
let mut v = vec![1, 2];
let r = &v[0];
v.push(3);
println!("{}", r);Powiązane kody błędów
E0599E0599 — Brak metody o nazwie X dla danego typu
Metoda nie istnieje dla danego typu lub wymagana cecha nie jest w zasięgu.
E0597E0597 — Pożyczona wartość nie żyje wystarczająco długo
Referencja przeżywa dane, na które wskazuje.
E0133E0133 — Wywołanie niebezpiecznej funkcji wymaga bloku unsafe
Niebezpieczna funkcja lub operacja jest używana poza blokiem unsafe.
E0308E0308 — Niezgodne typy w ramionach dopasowania
Różne ramiona dopasowania zwracają niezgodne typy.
E0384E0384 — Nie można przypisać wartości dwa razy do niemutowalnej zmiennej
Zmienna jest ponownie przypisywana, ale nie została zadeklarowana jako mutowalna.
E0200E0200 — Trait unsafe wymaga implementacji unsafe impl
Niebezpieczny trait musi być implementowany za pomocą bloku unsafe impl.