Практика на трейты и обобщения в Rust
В этих задачах сведем воедино набор
методов, параметры с несколькими типами
и хранение разных реализаций за одной
ссылкой. Собирайте каждый пример в одном
main.rs и выводите результат на экран.
Дана структура:
struct Note {
text: &'static str,
}
Объявите свой набор с методом, который
возвращает длину text как usize.
Выполните его для Note { text: "api" }
и выведите число.
Даны типы:
struct Pair {
a: i32,
b: i32,
}
Напишите обобщенную функцию, которая
принимает ссылку на любой тип и
возвращает его же без изменений. Передайте
Pair { a: 3, b: 7 }, выведите оба поля.
Даны типы:
struct Inch(i32);
struct Cm(i32);
Сделайте набор с методом as_mm,
реализуйте для обеих структур с разным
масштабом. Обобщенная функция должна
принимать только типы с этим набором
и печатать миллиметры для Inch(2)
и Cm(5).
Дана структура:
struct Quiet;
struct Loud;
Опишите набор с методом label,
который отдает "quiet" или "loud".
Положите реализации в коробку как
объект набора, вызовите label
для каждого и выведите обе строки.
Даны типы:
struct User {
name: &'static str,
}
struct Bot {
id: u32,
}
Набор Greet с методом hello
возвращает String. Функция принимает
срез коробок с объектами набора и печатает
каждое приветствие. Проверьте на одном
пользователе и одном боте с 1.
Дана структура:
struct Bag<T> {
item: T,
}
Добавьте метод take, который
забирает item по значению, только
если T копируется. Проверьте на
Bag { item: 9 } и выведите число.
Даны типы:
trait ShowLen {
fn len_hint(&self) -> usize;
}
struct Word(&'static str);
Реализуйте ShowLen для Word.
Обобщенная функция с ограничением
печатает подсказку длины. Передайте
Word("rust") и выведите результат.
Дано число:
let num = 4;
Сделайте набор с методом, который удваивает литерал. Храните две разные реализации в коробках, сложите ответы методов и выведите сумму для этого литерала.