Использование enum
Axes
для ограничения Coordinate
и Quaternion
:
#[derive(Clone)]
pub enum Axes {
Coordinate {x: f64, y: f64, z: f64, reserve: Vec<f64>,},
Quaternion {x: f64, y: f64, z: f64},
}
impl Axes {
pub fn shift(&mut self, Sample: &Axes) -> () {
let Dup: Axes = self.clone();
match Dup {
Axes::Coordinate {x, y, z, reserve} => {
match &Sample {
Axes::Coordinate {x, y, z, reserve} => {
*self = Axes::Coordinate {x: *x, y: *y, z: *z, reserve: reserve.to_vec()};
}
_ => panic!(),
}
}
Axes::Quaternion {x, y, z} => {
match &Sample {
Axes::Quaternion {x, y, z} => {
*self = Axes::Quaternion {x: *x, y: *y, z: *z};
}
_ => panic!(),
}
}
}
}
}
Использование черты Axes
для связи struct
Coordinate
и Quaternion
:
pub trait Axes {
fn shift(&mut self, Sample: &Axes) -> ();
fn fold(&mut self, Sample: &Axes) -> ();
}
pub struct Coordinate {
pub x: f64,
pub y: f64,
pub z: f64,
pub reserve: Vec<f64>,
}
pub struct Quaternion {
pub x: f64,
pub y: f64,
pub z: f64,
}
impl Axes for Coordinate {
fn shift(&mut self, Sample: &Axes) -> () { }
fn fold(&mut self, Sample: &Axes) -> () { }
}
impl Axes for Quaternion {
fn shift(&mut self, Sample: &Axes) -> () { }
fn fold(&mut self, Sample: &Axes) -> () { }
}
Является ли черта с struct
в этом случае более доступной и более эффективной? Я в некотором роде смущен тем, что использовать в каких случаях.