Я все еще новичок в Rust, но у меня есть сомнения относительно того, как изменчивость работает для полей в структурах. В частности, как мы можем изменить поля, которые изначально были неизменяемыми. Например:
struct Point {
x: isize,
y: isize,
}
impl Point {
fn new(x: isize, y: isize) -> Self {
Self { x, y }
}
fn set_x(&mut self, new_x: isize) {
self.x = new_x;
}
}
struct Line {
p: Point,
q: Point,
}
impl Line {
fn new(p: Point, q: Point) -> Self {
Self { p, q }
}
fn set_x_in_p(&mut self, new_x: isize) {
self.p.set_x(new_x);
}
}
fn main() {
// Both x and y are immutable
let p = Point::new(0, 0);
let q = Point::new(1, 1);
// Line IS mutable
let mut line = Line::new(p, q);
// Modifying point p (originally immutable) with a new x
line.set_x_in_p(999);
}
Вместо этого со ссылками мы не можем
let x = 3;
let y = &mut x; // does not work because x originally is immutable
Итак, как это работает? Спасибо.