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()); // 也可以工作
}