Общая ссылка в методе в Rust
Первый параметр метода часто задают как общую ссылку на значение. Так метод только читает поля и не забирает владение: переменная снаружи остается на месте и ее можно использовать дальше после вызова.
Запишем метод, который возвращает возраст пользователя:
struct User {
name: &'static str,
age: i32,
}
impl User {
fn age(&self) -> i32 {
self.age
}
}
Создадим значение и вызовем метод:
let user = User { name: "ann", age: 20 };
let years = user.age();
println!("{}", years);
На экране 20. Метод обращается к полю
через общую ссылку и отдает копию числа.
Сама переменная user после вызова
по-прежнему жива и ее поля доступны.
Тот же прием подойдет для подписи из имени или сравнения полей без записи обратно:
struct User {
name: &'static str,
age: i32,
}
impl User {
fn adult(&self) -> bool {
self.age >= 18
}
}
Проверим возраст у значения:
let user = User { name: "bob", age: 16 };
let ok = user.adult();
println!("{}", ok);
Дана структура:
struct User {
name: &'static str,
age: i32,
}
let user = User { name: "kate", age: 19 };
Добавьте метод с общей ссылкой, который
возвращает поле age, и выведите
результат вызова.
Дана структура:
struct Tag {
code: i32,
label: &'static str,
}
let tag = Tag { code: 7, label: "ok" };
Запишите метод, который возвращает поле
label, и выведите его.
Дана структура:
struct User {
name: &'static str,
age: i32,
}
let user = User { name: "leo", age: 17 };
Добавьте метод, который возвращает true,
если возраст не меньше 18, иначе
false. Выведите результат.