Изменяемая ссылка в методе в Rust
Чтобы метод менял поля исходного значения, первый параметр задают как изменяемую ссылку. Тогда внутри видны те же поля, что у переменной снаружи, и присваивание попадает в нее, а не в копию.
Запишем метод, который увеличивает возраст на единицу:
struct User {
name: &'static str,
age: i32,
}
impl User {
fn birthday(&mut self) {
self.age += 1;
}
}
Вызовем метод у изменяемого значения:
let mut user = User { name: "ann", age: 20 };
user.birthday();
println!("{}", user.age);
На экране 21. Переменная должна быть
объявлена изменяемой, иначе вызов метода
с изменяемой ссылкой не соберется.
Несколько вызовов подряд накапливают изменения в одном значении:
struct User {
name: &'static str,
age: i32,
}
impl User {
fn birthday(&mut self) {
self.age += 1;
}
}
Вызовем метод два раза подряд:
let mut user = User { name: "bob", age: 30 };
user.birthday();
user.birthday();
println!("{}", user.age);
Дана структура:
struct User {
name: &'static str,
age: i32,
}
let mut user = User { name: "bob", age: 30 };
Добавьте метод с изменяемой ссылкой, который
увеличивает возраст на 1, вызовите
его два раза и выведите возраст.
Дана структура:
struct Tank {
level: i32,
}
let mut tank = Tank { level: 5 };
Запишите метод, который прибавляет 3
к полю level, вызовите его и выведите
поле.
Дана структура:
struct User {
name: &'static str,
age: i32,
}
let user = User { name: "amy", age: 20 };
Скажите, соберется ли вызов метода с
изменяемой ссылкой у переменной без
mut.