Я изучаю Rust, и у меня возникают трудности с реализацией полиморфизма. Я хочу использовать массив для хранения Circle или Test.
trait Poli {
fn area(&self) -> f64;
}
struct Circle {
x: f64,
y: f64,
radius: f64,
}
impl Circle {
fn new (xx: f64, yy: f64, r: f64) -> Circle{
Circle{ x: xx, y: yy, radius: r }
}
}
impl Poli for Circle {
fn area(&self) -> f64 {
std::f64::consts::PI * (self.radius * self.radius)
}
}
struct Test {
x: f64,
y: f64,
radius: f64,
test: f64,
}
impl Test {
fn new (xx: f64, yy: f64, r: f64, t: f64) -> Circle{
Test{ x: xx, y: yy, radius: r, test: t, }
}
}
impl Poli for Test {
fn area(&self) -> f64 {
std::f64::consts::PI * (self.radius * self.radius)
}
}
Я не знаю, как сделать вектор для хранения типов с теми же trait:
let cir = Circle::new(10f64, 10f64, 10f64);
let test = Test::new(10f64, 10f64, 10f64, 10f64);
//let mut vec: Vec<Poli> = Vec::new(); <---
Я хотел бы повторить вектор и вызвать функции из черты. Есть ли способ сделать это или какая-то альтернатива?
Я прочитал документацию по трейт-объектам, но думаю, что это не то, что мне нужно.
enum. Если какой-то аспект этой главы вам непонятен, или вы можете объяснить, почему вы считаете это нехорошим решением, добавление этого может улучшить вопрос. - person DK.   schedule 01.04.2016