في 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`؟ ولماذا داخل الدوال...