Трейт Draw
Часть раздела Object Oriented Programming путешествия по Rust на Coddy — урок 49 из 61.
Задание
ЛегкоДавайте начнем создавать Систему Документов! В этом проекте вы создадите гибкий фреймворк для рендеринга компонентов пользовательского интерфейса с использованием трейт-объектов. Основа начинается с определения трейта Draw в его собственном файле модуля.
Вы создадите два файла для организации вашего кода:
draw.rs: Определите публичный трейтDrawс единственным методомdraw, который принимает&selfи выводит результат. Этот трейт будет служить контрактом, который должны выполнять все компоненты пользовательского интерфейса.main.rs: Подключите модульdrawи создайте простую структуруLabelс публичным полемtext(типаString). Реализуйте трейтDrawдляLabelтак, чтобы вызовdraw()выводил текст метки.
В вашей функции main создайте экземпляр Label и вызовите его метод draw() для отображения текста.
Будут предоставлены следующие входные данные:
- Строка, представляющая текст метки
Ваш вывод должен содержать в точности текст метки в одной строке.
Попробуйте сами
mod draw;
use draw::Draw;
// TODO: Определите публичную структуру Label с публичным полем text (String)
// TODO: Реализуйте трейт Draw для Label
// Метод draw должен выводить текст метки
fn main() {
let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let text = input.trim().to_string();
// TODO: Создайте экземпляр Label с введенным текстом
// TODO: Вызовите метод draw() у метки
}
Все уроки раздела Object Oriented Programming
1Методы и поведение
Введение в блоки реализацииПараметр SelfИзменяемые методыАссоциированные функцииНесколько блоков реализацииЦепочки вызовов методовИтоги: действия с Rectangle4Проект: Виртуальный питомец
Определение питомцаКормление питомца2Инкапсуляция и модули
Основы модулейКлючевое слово PublicПриватные поляГеттерыСеттерыИтоги — Безопасный сейф5Обобщения
Обобщённые структурыОбобщённые методыНесколько обобщённых типовОбобщённые функцииПовторение — Координатная точка8Трейты как ограничения
Синтаксис ограничений трейтовМножественные ограниченияКонструкция whereВозврат типов с трейтамиИтоги — Обобщённый принтер11Паттерны проектирования в Rust
Паттерн NewtypeКомпозицияТрейт DropFrom и IntoИтоги — Мок-объект Smart Pointer3Продвинутые перечисления
Перечисления с даннымиМетоды в перечисленияхСопоставление вариантов с даннымиСнова об Option EnumИтоги — перечисление Shape6Определение трейтов
Что такое трейт?Реализация трейтовРеализации по умолчаниюПереопределение реализаций по умолчаниюТрейты с параметрамиИтоги — Media Player