使用泛型和Fn trait 的闭包 1234567891011121314151617181920212223242526272829303132333435//实现一个缓存,只处理第一次传入的值并保存struct Cacher<T> where T: Fn(u32) -> u32 //这里的Fn trait有一个回调,是这个函数自带的 { calcuation: T, value: Option<u32>, }impl<T> Cacher<T> where T: Fn(u32) -> u32{ fn new(calcuation: T) -> Cacher<T> { Cacher { calcuation, //当传入参数和函数体字段重名的时候,可以省略参数类型声明 value: None, } } fn value(&mut self,arg: u32) -> u32 { match self.value { Some(v) => v, None => { let v = (self.calcuation)(arg); //由于calcuation是一个闭包 self.value = Some(v); v }, } } }fn main() { let mut c = Cacher::new(|x| x+1); //设计回调,使用回调 let v1 = c.value(1); let v2 = c.value(2); //进行some的调用 println!("value = {}",v2); println!("value = {}",v1); }