Как назначить данные структуры в себя в методе? - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь изменить self, который временно сохраняется в другой переменной.На последнем шаге я хочу скопировать все данные из переменной в self.

struct A {
    x: i32,
}

impl A {
    fn new() -> Self {
        Self { x: 0 }
    }

    fn change(&mut self) {
        let mut a = Self::new();
        a.x += 1;

        self = a; // How to copy data from a variable into self?
    }
}

Я получаю сообщение об ошибке:

error[E0308]: mismatched types
  --> src/lib.rs:14:16
   |
14 |         self = a; // How to copy data from a variable into self?
   |                ^
   |                |
   |                expected &mut A, found struct `A`
   |                help: consider mutably borrowing here: `&mut a`
   |
   = note: expected type `&mut A`
              found type `A`

Я пробовал self = &a и self = &mut a, это не сработало.Как мне скопировать данные в self из a в этой строке?

Я знаю, что мой пример не оптимален, потому что я мог бы просто написать self.x += 1.В моем полном проекте у меня сложные расчеты с a, которые включают сам self, поэтому мне нужно строго скопировать в последнюю строку.

1 Ответ

0 голосов
/ 06 февраля 2019

Вам нужно разыменовать self:

*self = a;

Нет ничего уникального в self или в том факте, что это метод.То же самое верно для любой изменяемой ссылки, где вы заменяете значение.

См. Также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...