PiHao_learn_rust_crate_upload 0.1.0

My First Rust Terminal Project
Documentation
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);
                // let v = 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)

}