E0502E0502 — لا يمكن الاستعارة بصورة قابلة للتعديل لوجود استعارة غير قابلة للتعديل
لا يمكن استعارة قيمة بشكل قابل للتعديل طالما أن استعارة غير قابلة للتعديل لا تزال فعّالة.
أسباب هذا الخطأ
يُطبّق Rust قاعدة تمنع وجود مرجع قابل للتعديل ومرجع غير قابل للتعديل لنفس البيانات في الوقت ذاته. الاستعارة غير القابلة للتعديل لا تزال مستخدمة عند محاولة أخذ استعارة قابلة للتعديل.
كيفية الإصلاح
أعد هيكلة الكود بحيث تنتهي الاستعارة غير القابلة للتعديل قبل بدء الاستعارة القابلة للتعديل. انسخ البيانات إذا كنت بحاجة لنسخ مستقلة. استخدم كتلة برمجية لتقييد نطاق الاستعارة غير القابلة للتعديل.
مثال
let mut v = vec![1, 2];
let r = &v[0];
v.push(3);
println!("{}", r);رموز أخطاء ذات صلة
E0599E0599 — لا توجد طريقة باسم X على النوع
الطريقة غير موجودة على النوع المحدد، أو السمة المطلوبة ليست في النطاق.
E0597E0597 — القيمة المستعارة لا تعيش طويلاً بما يكفي
مرجع يتجاوز عمر البيانات التي يشير إليها.
E0133E0133 — استدعاء دالة غير آمنة يتطلب كتلة unsafe
دالة أو عملية غير آمنة مستخدَمة خارج كتلة unsafe.
E0308E0308 — أنواع غير متطابقة في أذرع match
تُرجع أذرع match مختلفة أنواعاً غير متوافقة.
E0384E0384 — لا يمكن الإسناد مرتين لمتغير غير قابل للتغيير
متغير يُعاد إسناده لكنه لم يُعلَن كمتغير قابل للتغيير.
E0200E0200 — الـ Trait غير الآمنة تتطلب impl غير آمنًا
الـ trait غير الآمنة يجب تنفيذها بكتلة unsafe impl.