Avatar ·

في Rust: ما الفرق بين self و Self (الأحرف الكبيرة والصغيرة)؟

مرحباً بالجميع! بدأت تعلم Rust واصطدمت بشيء غريب: في الكود كثيراً ما أرى `self` و `Self`، لكنهما يُستخدمان بشكل مختلف. أنا مرتبك. هذا مثال من كتاب Rust أحاول فهمه: ```rust struct Point { x: f64, y: f64, } impl Point { fn new(x: f64, y: f64) -> Self { Self { x, y } } fn distance(&self, other: &Self) -> f64 { let dx = self.x - other.x; let dy = self.y - other.y; (dx * dx + dy * dy).sqrt() } } ``` أرى أنه في `fn new` يتم إرجاع `Self`، وفي `fn distance` المعامل `other` له النوع `&Self`. وفي داخل الدوال أصل إلى الحقول عبر `self.x`. لكن أليس `self` و `Self` هما نفس الشيء؟ لماذا يُكتبان بشكل مختلف؟ سؤالي: ما الفرق الجوهري بين `self` (بحرف صغير) و `Self` (بحرف كبير)؟ متى يجب استخدام الواحد ومتى الآخر؟ هل يمكن بدلاً من `Self` كتابة اسم الـ struct مباشرة، مثلاً `Point`؟ ولماذا داخل الدوال...