Приёмник &mut self
Приёмник &mut self используется в методах структур для получения изменяемой ссылки на текущий экземпляр. Такой метод может изменять поля структуры, но не может перемещать или забирать владение экземпляром. При вызове метода структура должна быть объявлена как изменяемая переменная.
Синтаксис
impl StructName
{
fn method_name(&mut self)
{
// тело метода
}
}
Пример
Давайте создадим структуру Counter и метод increment, который увеличивает значение счётчика:
struct Counter
{
value: i32,
}
impl Counter
{
fn increment(&mut self)
{
self.value += 1;
}
}
fn main()
{
let mut counter = Counter { value: 0 };
counter.increment();
println!("{}", counter.value);
}
Результат выполнения кода:
1
Пример
Давайте создадим структуру Point и метод shift, который сдвигает точку на заданные значения:
struct Point
{
x: i32,
y: i32,
}
impl Point
{
fn shift(&mut self, dx: i32, dy: i32)
{
self.x += dx;
self.y += dy;
}
}
fn main()
{
let mut point = Point { x: 10, y: 20 };
point.shift(5, -3);
println!("x: {}, y: {}", point.x, point.y);
}
Результат выполнения кода:
x: 15, y: 17
Пример
Давайте создадим структуру StringHolder и метод append, который добавляет текст к хранимой строке:
struct StringHolder
{
text: String,
}
impl StringHolder
{
fn append(&mut self, suffix: &str)
{
self.text.push_str(suffix);
}
}
fn main()
{
let mut holder = StringHolder { text: String::from("abcde") };
holder.append("12345");
println!("{}", holder.text);
}
Результат выполнения кода:
"abcde12345"