Rust - Почему нам не нужно заимствовать A при вызове A::func(&self) из A self

См. код:

struct A {}

impl A {
    fn a(&self) {}
}

pub fn main() {
    let a = A {};
    a.a();
    A::a(&a);
}

Почему a.a() не нужен &, а нужен A::a(&a)? Какая разница?

точечный оператор буквально является синтаксическим сахаром для A::a(&a).

isaactfa 07.05.2022 13:16

@isaactfa, похоже на ответ мне.

hkBst 07.05.2022 19:13

Отвечает ли это на ваш вопрос? Каковы точные правила автоматического разыменования Rust?

Chayim Friedman 08.05.2022 02:51
Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
1
3
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В Rust a.a() является синтаксическим сахаром для A::a(&a), поэтому a заимствуется в обоих вызовах. Оператор точки также делает гораздо больше, вы можете прочитать об этом здесь.

Также стоит отметить, что в более общем случае, если бы у fn a(&self) был получатель &mut self / self, синтаксический сахар был бы A::a(&mut a) / A::a(a) соответственно.

Filipe Rodrigues 08.05.2022 01:53

Другие вопросы по теме