Avatar ·

ما هي القواعد الدقيقة للإلغاء التلقائي للمراجع (auto-dereferencing) في Rust؟

مرحباً بالجميع! لقد بدأت تعلم Rust مؤخراً ولا أستطيع فهم الإلغاء التلقائي للمراجع (auto-dereferencing). تقول الوثائق أن المترجم يقوم تلقائياً بإلغاء المراجع عند الحاجة، لكني أخلط دائماً. إليك مثال بسيط. لدي هيكل `Point` مع دالة `distance_from_origin`. أقوم بإنشاء نسخة، ثم مرجع إليها، ثم مرجع إلى المرجع، وأحاول استدعاء الدالة: ```rust struct Point { x: f64, y: f64, } impl Point { fn distance_from_origin(&self) -> f64 { (self.x.powi(2) + self.y.powi(2)).sqrt() } } fn main() { let p = Point { x: 3.0, y: 4.0 }; let r1 = &p; // &Point let r2 = &&p; // &&Point let r3 = &&&p; // &&&Point println!("{}", p.distance_from_origin()); // يعمل println!("{}", r1.distance_from_origin()); // يعمل! println!("{}", r2.distance_from_origin()); // يعمل!! println!("{}", r3.distance_from_origin()); // يعمل أيضاً }