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

Метод по значению в Rust

Первый параметр можно записать без ссылки. Тогда метод получает само значение целиком и забирает владение. После вызова старое имя снаружи больше не живо: к нему нельзя обратиться ни для поля, ни для второго вызова.

Запишем метод, который забирает пользователя и возвращает только возраст:

struct User { name: &'static str, age: i32, } impl User { fn into_age(self) -> i32 { self.age } }

Создадим значение и вызовем метод:

let user = User { name: "ann", age: 20 }; let years = user.into_age(); println!("{}", years);

На экране 20. Число скопировали в результат, а структура осталась внутри метода и была уничтожена в конце вызова. Имя user после этого использовать нельзя.

Такой прием удобен, когда значение нужно разобрать на части и больше не хранить целиком:

struct Pair { left: i32, right: i32, } impl Pair { fn sum(self) -> i32 { self.left + self.right } }

Разберем пару и выведем сумму:

let pair = Pair { left: 3, right: 4 }; let total = pair.sum(); println!("{}", total);

Дана структура:

struct User { name: &'static str, age: i32, } let user = User { name: "bob", age: 30 };

Добавьте метод без ссылки, который возвращает поле age, вызовите его и выведите результат.

Дана структура:

struct Box { weight: i32, } let item = Box { weight: 10 };

Запишите метод, который забирает значение и возвращает weight. Выведите число и скажите, можно ли после этого прочитать item.

Дан следующий код:

struct User { name: &'static str, age: i32, } impl User { fn into_age(self) -> i32 { self.age } } let user = User { name: "leo", age: 25 }; let years = user.into_age();

Скажите, соберется ли обращение к user.name после строки с years.

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