functions - rust data types
¿Cómo puedo mutar el campo de una estructura a partir de un método? (1)
&mut self
usar
&mut self
lugar de
&self
y hacer que la variable
p
mutable:
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();
}
En Rust, la mutabilidad se hereda: el propietario de los datos decide si el valor es mutable o no. Sin embargo, las referencias no implican propiedad y, por lo tanto, pueden ser inmutables o mutables. Debería leer el libro oficial que explica todos estos conceptos básicos.
Quiero hacer esto:
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();
}
Pero este código arroja un error de compilación:
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