Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpMtMR 3 of 288 menu
◀ ▶

Изменяемая ссылка в методе в 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.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить