pub type Operator = dyn Fn(f64, f64) -> f64; pub struct Operation { sign: char, func: Box } impl Operation { pub fn new(sign: char, func: Box) -> Self { Self { sign, func } } pub fn sign(&self) -> char { self.sign } pub fn evaluate(&self, a: f64, b: f64) -> f64 { (self.func)(a, b) } } #[macro_export] macro_rules! opvec { ($(($x:expr, $y:expr)), *) => { vec![$( Operation::new($x, Box::new($y)), )*] }; }