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