gw_rust_programming_tutorial/chapter_13/
test_closure.rs

1pub fn fn_closure()
2{
3    println!("=================chapter 13===================");
4    simulated_expensive_calculation(1);
5    generate_workout(25,4);
6
7    closure_ref();
8}
9
10use std::thread;
11use std::time::Duration;
12
13fn simulated_expensive_calculation(intensity: u32) -> u32 {
14    println!("calculating slowly...");
15    thread::sleep(Duration::from_secs(2));
16    intensity
17}
18
19fn generate_workout(intensity: u32, random_number: u32) {
20    let expensive_closure = |num| {
21        println!("calculating slowly...");
22        thread::sleep(Duration::from_secs(2));
23        num
24    };
25
26    if intensity < 25 {
27        println!(
28            "Today, do {} pushups!",
29            expensive_closure(intensity)
30        );
31        println!(
32            "Next, do {} situps!",
33            expensive_closure(intensity)
34        );
35    } else {
36        if random_number == 3 {
37            println!("Take a break today! Remember to stay hydrated!");
38        } else {
39            println!(
40                "Today, run for {} minutes!",
41                expensive_closure(intensity)
42            );
43        }
44    }
45}
46
47
48fn closure_ref()
49{
50    let x = vec![1, 2, 3];
51
52    let equal_to_x = |z| z == *x;
53
54    println!("can't use x here: {:?}", x);
55
56    let y = vec![1, 2, 3];
57
58    println!("equal_to_x{}",equal_to_x(y));
59}