Je veux faire ça:
struct Point {
x: i32,
y: i32,
}
impl Point {
fn up(&self) {
self.y += 1;
}
}
fn main() {
let p = Point { x: 0, y: 0 };
p.up();
}
Mais ce code renvoie une erreur de compilation:
error[E0594]: cannot assign to field `self.y` of immutable binding
--> src/main.rs:8:9
|
7 | fn up(&self) {
| ----- use `&mut self` here to make mutable
8 | self.y += 1;
| ^^^^^^^^^^^ cannot mutably borrow field of immutable binding
Vous devez utiliser &mut self
au lieu de &self
et modifiez la variable p
:
struct Point {
x: i32,
y: i32,
}
impl Point {
fn up(&mut self) {
// ^^^ Here
self.y += 1;
}
}
fn main() {
let mut p = Point { x: 0, y: 0 };
// ^^^ And here
p.up();
}
Dans Rust, la mutabilité est héritée: le propriétaire des données décide si la valeur est mutable ou non. Cependant, les références n'impliquent pas la propriété et peuvent donc être elles-mêmes immuables ou modifiables. Vous devriez lire le livre officiel qui explique tous ces concepts de base.