Avatar ·

Box، ref، & و * في Rust: ما الفرق وكيفية استخدامها؟

مرحباً بالجميع! لقد بدأت تعلم Rust مؤخراً وأخلط باستمرار بين هذه الأشياء الأربعة: `Box` و `ref` و `&` و `*`. أفهم أن جميعها مرتبطة بالمؤشرات والمراجع، لكن لا أستطيع استيعاب متى أستخدم أياً منها. على سبيل المثال، أكتب هذا البرنامج: ```rust fn main() { let x = 42; let y = &x; // reference let z = Box::new(x); // Box println!("{} {} {}", y, z); } ``` كل شيء يعمل هنا. لكن عندما أحاول فعل شيء أكثر تعقيداً، مثل مطابقة الأنماط، كل شيء ينهار: ```rust fn main() { let maybe_number = Some(10); match maybe_number { Some(ref x) => println!("حصلنا على {}", x), None => println!("لا يوجد شيء"), } } ``` لماذا نحتاج `ref` هنا، وليس فقط `x`؟ وما الفرق بين `*` و `&`؟ قرأت أن `*` هو إلغاء المرجعية، لكن لماذا نحتاجه إذا كان يمكننا استخدام `&` فقط؟ اشرحوا لي، من فضلكم، بطريقة مبسطة كيف ترتبط هذه الكيانات الأربعة ومتى نستخدم كل منها. يهمني بشكل خاص الجانب العملي.