Avatar ·

خطأ "cannot move out of borrowed content" في Rust: الأسباب والإصلاح

مرحبًا! بدأت تعلم Rust وواجهت خطأً لا أفهمه. الكود: ```rust fn main() { let s = String::from("hello"); let r = &s; let s2 = *r; // خطأ: cannot move out of borrowed content println!("{}", s2); } ``` ظننت أن `*r` يفك إشارة المرجع ويعطيني ملكية السلسلة `s`. لكن المترجم يقول: "cannot move out of `*r` which is behind a shared reference". لماذا؟ فأنا فقط أريد نسخ القيمة. نفس الشيء يحدث مع المصفوفات الديناميكية: ```rust fn get_first(v: &Vec) -> i32 { v[0] // خطأ: cannot move out of borrowed content } ``` أفهم أن Rust يراقب الملكية بدقة، لكني لا أفهم لماذا لا يمكنني ببساطة "أخذ" القيمة عبر المرجع. في لغات أخرى (C++, Python) هذا يعمل. كيف أحصل على القيمة من المرجع بشكل صحيح؟ ولماذا يوجد هذا التقييد؟ اشرح لي، من فضلك، كيف أصلح هذه الأمثلة وما هو السبب العميق للخطأ. شكرًا مقدمًا! <<>>

باختصار: لماذا