Avatar ·

ماذا تعني رموز العطف (&) والنجمة (*) في Rust؟

مرحباً بالجميع! لقد بدأت للتو في تعلم Rust ولا أستطيع فهم العاملين: & (عطف) و * (نجمة). في لغات أخرى، مثل C++، اعتدت أن & يعني أخذ العنوان، و * يعني إلغاء الإشارة للمؤشر. لكن في Rust الأمر مختلف نوعاً ما.

على سبيل المثال، كتبت برنامجاً بسيطاً يحاول تغيير قيمة متغير عبر دالة:

fn main() {
    let x = 42;
    let y = &x;
    println!("{}", y); // يعمل، لكن ماذا يحدث هنا؟
    
    let mut z = 10;
    change_value(&z);
    println!("{}", z);
}

fn change_value(val: &i32) {
    *val = 100; // خطأ! لماذا؟
}

يشتكي المترجم من السطر *val = 100، ويقول شيئاً عن أن val هو مرجع غير قابل للتغيير. لكنني أستخدم النجمة لإلغاء الإشارة! لماذا لا يعمل هذا؟

أيضاً، لا أفهم لماذا أحتاج أحياناً إلى كتابة & قبل المتغير عند تمريره إلى دالة، وأ