Полиморфизм и трейты в Rust
Полиморфизм и трейты
3
Полиморфизм - это возможность использования одного и того же кода для работы с различными типами данных. В Rust полиморфизм достигается за счет использования трейтов - абстрактных типов данных, которые определяют набор методов, доступных для типов данных, реализующих данный трейт.
Пример использования трейтов в Rust:
trait Drawable { fn draw(&self); } struct Circle { radius: f64, } impl Drawable for Circle { fn draw(&self) { // code to draw a circle } } struct Rectangle { width: f64, height: f64, } impl Drawable for Rectangle { fn draw(&self) { // code to draw a rectangle } } fn main() { let shapes = vec![ Box::new(Circle { radius: 5.0 }), Box::new(Rectangle { width: 10.0, height: 5.0 }), ]; for shape in shapes { shape.draw(); } }
В данном примере определен трейт Drawable, который определяет метод draw. Затем определены структуры Circle и Rectangle, которые реализуют данный трейт.
В функции main создается вектор фигур (шейпов), которые реализуют трейт Drawable. Затем происходит итерация по вектору и вызов метода draw для каждого элемента вектора. Обратите внимание, что при это не важно, какой конкретно тип фигуры - для всех фигур вызывается один и тот же метод draw, который определен в трейте Drawable.
Таким образом, трейты являются мощным инструментом для достижения полиморфизма в Rust и позволяют писать более гибкий и универсальный код.
March 27, 2023