См. код:
struct A {}
impl A {
fn a(&self) {}
}
pub fn main() {
let a = A {};
a.a();
A::a(&a);
}
Почему a.a()
не нужен &
, а нужен A::a(&a)
? Какая разница?
@isaactfa, похоже на ответ мне.
Отвечает ли это на ваш вопрос? Каковы точные правила автоматического разыменования Rust?
В Rust a.a()
является синтаксическим сахаром для A::a(&a)
, поэтому a
заимствуется в обоих вызовах. Оператор точки также делает гораздо больше, вы можете прочитать об этом здесь.
Также стоит отметить, что в более общем случае, если бы у fn a(&self)
был получатель &mut self
/ self
, синтаксический сахар был бы A::a(&mut a)
/ A::a(a)
соответственно.
точечный оператор буквально является синтаксическим сахаром для
A::a(&a)
.