E0502E0502 — Değiştirilebilir Olarak Ödünç Alınamıyor Çünkü Değiştirilemez Olarak da Ödünç Alınmış
Etkin bir değiştirilemez ödünç alma (immutable borrow) varken bir değer değiştirilebilir (mutable) olarak ödünç alınamaz.
Bu hatanın nedenleri
Rust, aynı veriye aynı anda hem değiştirilebilir hem de değiştirilemez bir referans bulunmasını engeller. Değiştirilebilir bir ödünç alma yapmaya çalıştığınızda değiştirilemez ödünç alma hâlâ kullanımdadır.
Nasıl düzeltilir
Kodu, değiştirilemez ödünç alma değiştirilebilir ödünç alma başlamadan önce sona erecek şekilde yeniden yapılandırın. Bağımsız kopyalara ihtiyacınız varsa veriyi klonlayın. Değiştirilemez ödünç almanın kapsamını sınırlamak için bir blok kullanın.
Örnek
let mut v = vec![1, 2];
let r = &v[0];
v.push(3);
println!("{}", r);İlgili Hata Kodları
E0599E0599 — Tip İçin X Adında Metot Bulunamadı
Metot, verilen tip üzerinde mevcut değil veya gerekli trait kapsamda (scope) değil.
E0597E0597 — Ödünç Alınan Değer Yeterince Uzun Yaşamıyor
Bir referans, işaret ettiği veriden daha uzun yaşıyor.
E0133E0133 — Unsafe Fonksiyon Çağrısı Unsafe Blok Gerektirir
Bir unsafe fonksiyon veya işlem, unsafe bloğu dışında kullanılıyor.
E0308E0308 — Match Kollarında Uyumsuz Türler
Farklı match kolları uyumsuz türler döndürüyor.
E0384E0384 — Değişmez Değişkene İki Kez Atama Yapılamaz
Bir değişkene yeniden atama yapılıyor ancak değişken mutable olarak bildirilmemiş.
E0200E0200 — Unsafe Trait, Unsafe Impl Gerektirir
Bir unsafe trait, unsafe impl bloğuyla uygulanmalıdır.