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

Практика на трейты и обобщения в 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;

Сделайте набор с методом, который удваивает литерал. Храните две разные реализации в коробках, сложите ответы методов и выведите сумму для этого литерала.

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