Rust中的闭包

Posted aguncn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rust中的闭包相关的知识,希望对你有一定的参考价值。

这个功能有点高级,

暂时理解不完全,

先把代码练正确吧。

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

 
 */

技术图片

以上是关于Rust中的闭包的主要内容,如果未能解决你的问题,请参考以下文章

Rust中的闭包

用 Rust 处理 WebAssembly 中的闭包而不是使用忘记和泄漏内存有啥更好的方法?

Rust闭包和Haskell lambda有什么区别? [关闭]

有没有办法让 Rust 闭包只将一些变量移入其中?

Rust编程语言入门之函数式语言特性:-迭代器和闭包

在 WASM-Bindgen Rust 中使用鼠标输入事件闭包创建回调时出现闭包调用错误