История изменений
Исправление pftBest, (текущая версия) :
У такого подхода есть и минусы, это проявляется когда нужно отдать изменяемую ссылку на поле структуры. Например есть такая структура:
struct Point {
x: u32,
y: u32,
}
impl Point {
fn get_x(&mut self) -> &mut u32 {
&mut self.x
}
fn get_y(&mut self) -> &mut u32 {
&mut self.y
}
}
get_x и get_y отдают ссылку только на часть обьекта, но по сигнатуре не понятно на какую именно часть. Поэтому такой код будет работать:
let mut p = Point{x: 1, y: 2};
*p.get_x() = 3;
*p.get_y() = 4;
А такой код уже не будет работать:
let mut p = Point { x: 1, y: 2 };
let px = p.get_x();
let py = p.get_y();
*px = 3;
*py = 4;
https://play.rust-lang.org/?gist=077dd7f656ec26b4696cafe522684b64&version...
Исходная версия pftBest, :
У такого подхода есть и минусы, это проявляется когда нужно отдать изменяемую ссылку на поле структуры. Например есть такая структура:
struct Point {
x: u32,
y: u32,
}
impl Point {
fn get_x(&mut self) -> &mut u32 {
&mut self.x
}
fn get_y(&mut self) -> &mut u32 {
&mut self.y
}
}
get_x и get_y отдают ссылку только на чать обьекта, но по сигнатуре не понятно на какую именно часть. Поэтому такой код будет работать:
let mut p = Point{x: 1, y: 2};
*p.get_x() = 3;
*p.get_y() = 4;
А такой код уже не будет работать:
let mut p = Point { x: 1, y: 2 };
let px = p.get_x();
let py = p.get_y();
*px = 3;
*py = 4;
https://play.rust-lang.org/?gist=077dd7f656ec26b4696cafe522684b64&version...