struct Cacher<T>
where T: Fn(u32) -> u32
{
calculation: T,
value: Option<u32>,
}
impl <T> Cacher<T>
where T: Fn(u32) ->u32 ,
{
fn new (calculation : T) -> Cacher<T> {
Cacher { calculation: 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
}
}
}
}
fn main() {
let mut cacher = Cacher::new(|a| a);
let b = 10;
let c = cacher.value(b);
let equal_to_x = |z| z==b;
println!(" equal to = {}",equal_to_x(10));
assert_eq!(b,c)
}