struct Cacher where T: Fn(u32) -> u32, { calculation: T, value: Option, } // ANCHOR: here impl Cacher where T: Fn(u32) -> u32, { fn new(calculation: T) -> Cacher { Cacher { calculation, value: None, } } fn value(&mut self, arg: u32) -> u32 { match self.value { Some(v) => v, None => { let v = (self.calculation)(arg); self.value = Some(v); v } } } } // ANCHOR_END: here fn main() {}