Rust中的闭包

匿名 (未验证) 提交于 2019-12-02 23:56:01

这个功能有点高级,

暂时理解不完全,

先把代码练正确吧。

use std::thread; use std::time::Duration;  struct Cacher<T> where T: Fn(u32) -> u32 {     caculation: T,     value: Option<u32>, }  impl<T> Cacher<T> where T: Fn(u32) -> u32 {     fn new(caculation: T) -> Cacher<T> {         Cacher {             caculation,              value: None,         }     }      fn value(&mut self, arg: u32) -> u32 {         match self.value {             Some(v) => v,             None => {                 let v = (self.caculation)(arg);                 self.value = Some(v);                 v             },         }     } }  fn main() {     let simulated_user_specified_value = 6;     let simulated_random_number = 30;      generate_workout(         simulated_user_specified_value,         simulated_random_number     ); }  fn generate_workout(intensity: u32, random_number: u32) {     let mut expensive_result = Cacher::new(|num| {         println!("calculating slowly...");         thread::sleep(Duration::from_secs(2));         num     });      if intensity < 25 {         println!("Today, do {} pushups",         expensive_result.value(intensity));         println!("Next, do {} situps!",         expensive_result.value(intensity));     } else {         if random_number == 3 {             println!("Take a break today! Remember to stay hydrated!");         } else {             println!("Today, run for {} minutes!",             expensive_result.value(intensity));         }     } }  /* fn simulated_expensive_calculation(num: u32) -> u32 {     println!("calculating slowly...");     thread::sleep(Duration::from_secs(2));     num   }  */

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!