Как избежать дубликации кода реализуя 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
107 +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 Апр 2024 в 15:42
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир