Avatar ·

¿Cuáles son las reglas exactas del auto-dereferencing en Rust?

¡Hola a todos! Empecé a estudiar Rust recientemente y no puedo entender el auto-dereferencing. La documentación dice que el compilador dereferencia las referencias automáticamente cuando es necesario, pero siempre me confundo. Aquí hay un ejemplo simple. Tengo una estructura `Point` con un método `distance_from_origin`. Creo una instancia, luego una referencia a ella, luego una referencia a la referencia, e intento llamar al método: ```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()); // Funciona println!("{}", r1.distance_from_origin()); // ¡Funciona! println!("{}", r2.distance_from_origin()); // ¡¡Funciona!! println!("{}", r3.distance_from_origin()); // También funciona }