Was sind die genauen Regeln für automatisches Dereferenzieren (auto-dereferencing) in Rust?
Hallo zusammen! Ich habe vor kurzem angefangen, Rust zu lernen, und komme mit dem automatischen Dereferenzieren (auto-dereferencing) nicht klar. In der Dokumentation steht, dass der Compiler Referenzen automatisch dereferenziert, wenn nötig, aber ich bin ständig verwirrt.
Hier ist ein einfaches Beispiel. Ich habe eine Struktur `Point` mit einer Methode `distance_from_origin`. Ich erstelle eine Instanz, dann eine Referenz darauf, dann eine Referenz auf die Referenz, und versuche, die Methode aufzurufen:
```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()); // Funktioniert
println!("{}", r1.distance_from_origin()); // Funktioniert!
println!("{}", r2.distance_from_origin()); // Funktioniert!!
println!("{}", r3.distance_from_origin()); // Funktioniert auch
}