Введение
В этом лабораторном задании определяется общий трейт DoubleDrop, который включает метод double_drop, позволяющий типу освобождать сам себя и входной параметр.
Примечание: Если лабораторная работа не уточняет имя файла, вы можете использовать любое имя файла, которое хотите. Например, вы можете использовать
main.rs, скомпилировать и запустить его с помощьюrustc main.rs &&./main.
Трейты
Конечно, трейты могут быть также обобщенными. Здесь мы определяем один, который переопределяет трейт Drop в виде обобщенного метода для освобождения самой себя и входного параметра.
// Не копирующиеся типы.
struct Empty;
struct Null;
// Трейт, обобщенный по `T`.
trait DoubleDrop<T> {
// Определите метод для вызывающего типа, который принимает
// дополнительный параметр `T` и ничего с ним не делает.
fn double_drop(self, _: T);
}
// Реализуйте `DoubleDrop<T>` для любого обобщенного параметра `T` и
// вызывающего типа `U`.
impl<T, U> DoubleDrop<T> for U {
// Этот метод получает владение обоими переданными аргументами,
// освобождая обоих.
fn double_drop(self, _: T) {}
}
fn main() {
let empty = Empty;
let null = Null;
// Освободите память от `empty` и `null`.
empty.double_drop(null);
//empty;
//null;
// ^ TODO: Попробуйте раскомментировать эти строки.
}
Резюме
Поздравляем! Вы завершили лабораторную работу по Трейтам. Вы можете практиковаться в других лабораторных работах в LabEx, чтобы улучшить свои навыки.