Как избежать дубликации кода реализуя Trait'ы в Rust? Допустим у меня есть много структур, каждая из которых содержит одинаковое поле area и реализует интерфейс Shape. К примеру:pub trait Shape { fn get_area(&self) -> f64; } pub struct Rectangle { area: f64 } impl Shape for Rectangle { fn get_area(&self) -> f64 { return self.area; } } pub struct Circle { area: f64 } impl Shape for Circle { fn get_area(&self) -> f64 { return self.area; } } Правильно ли я понимаю, что для каждого нового типа надо переписывать метод get_area? Как избежать дубликации кода реализуя Trait'ы в Rust?

29 Дек 2023 в 19:54
80 +1
0
Ответы
1

Да, в данном случае для каждого нового типа придется реализовывать метод get_area повторно, что приводит к дублированию кода. Одним из способов избежать дубликации кода при использовании Trait'ов в Rust является использование дефолтной реализации методов. Например, вы можете определить дефолтную реализацию метода get_area в Trait Shape, которая будет возвращать значение поля area структуры по умолчанию. В этом случае для каждого нового типа, который реализует Trait Shape, вам не нужно будет реализовывать метод get_area, если значение поля area используется для вычисления площади.

Пример:

pub trait Shape {
fn get_area(&self) -> f64 {
self.area()
}
fn area(&self) -> f64;
}
pub struct Rectangle {
area: f64,
}
impl Shape for Rectangle {
fn area(&self) -> f64 {
self.area
}
}
pub struct Circle {
area: f64,
}
impl Shape for Circle {
fn area(&self) -> f64 {
self.area
}
}

Таким образом, при добавлении новых типов, реализующих интерфейс Shape, вам не нужно будет заново реализовывать метод get_area, если его вычисление зависит от значения поля area.

16 Апр в 15:42
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 548 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир