Подтвердить что ты не робот

Как мутировать поле структуры в методе

Как я могу мутировать структуру структуры из метода?

Я хочу сделать это

struct Point {
    x: int,
    y: int,
}

impl Point {
    fn up(&self) {
        self.y += 1;
    }
}

fn main() {
    let p = Point { x: 0, y: 0 };
    p.up();
}

Но этот код выдает ошибку компиляции:

/src/main.rs:8:3: 8:14 error: cannot assign to immutable field `self.y`
/src/main.rs:8                self.y += 1;
4b9b3361

Ответ 1

Вам нужно использовать &mut self вместо &self:

struct Point {
    x: int,
    y: int,
}

impl Point {
    fn up(&mut self) {
        self.y += 1;
    }
}

fn main() {
    let mut p = Point { x: 0, y: 0 };
    p.up();
}

В Rust изменчивость наследуется: владелец данных решает, изменяется ли значение или нет. Однако ссылки не подразумевают права собственности, и, следовательно, они могут быть неизменными или изменяться. Вы должны прочитать официальную книгу , которая объясняет все эти основные понятия.