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`؟ وما الفرق بين `*` و `&`؟ قرأت أن `*` هو إلغاء المرجعية، لكن لماذا نحتاجه إذا كان يمكننا استخدام `&` فقط؟
اشرحوا لي، من فضلكم، بطريقة مبسطة كيف ترتبط هذه الكيانات الأربعة ومتى نستخدم كل منها. يهمني بشكل خاص الجانب العملي.