diff --git a/closure/src/main.rs b/closure/src/main.rs index fe0ddb1..dd74105 100644 --- a/closure/src/main.rs +++ b/closure/src/main.rs @@ -9,26 +9,28 @@ fn main() { generate_workout(simulated_user_specified_value, simulated_random_number); } -struct Cacher +struct Cacher where - T: Fn(u32) -> u32, + T: Fn(X) -> Y, { calculation: T, - values: HashMap, + values: HashMap, } -impl Cacher +impl Cacher where - T: Fn(u32) -> u32, + X: std::cmp::Eq + std::hash::Hash + Copy, + Y: Copy, + T: Fn(X) -> Y, { - fn new(calculation: T) -> Cacher { + fn new(calculation: T) -> Cacher { Cacher { calculation, values: HashMap::new(), } } - fn value(&mut self, arg: u32) -> u32 { + fn value(&mut self, arg: X) -> Y { match self.values.get(&arg) { Some(v) => *v, None => {