Quelles sont les règles exactes du déréférencement automatique (auto-dereferencing) en Rust ?
Bonjour à tous ! J'ai commencé à apprendre Rust récemment et je n'arrive pas à comprendre le déréférencement automatique (auto-dereferencing). Dans la documentation, il est dit que le compilateur déréférence lui-même les références lorsque c'est nécessaire, mais je suis constamment confus.
Voici un exemple simple. J'ai une structure `Point` avec une méthode `distance_from_origin`. Je crée une instance, puis une référence vers elle, puis une référence vers la référence, et j'essaie d'appeler la méthode :
```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()); // Fonctionne
println!("{}", r1.distance_from_origin()); // Fonctionne !
println!("{}", r2.distance_from_origin()); // Fonctionne !!
println!("{}", r3.distance_from_origin()); // Fonctionne aussi
}