closure/
mut_move.rs

1// File: ./bin-hello/examples/closure/mut_move.rs
2// clear && cargo run --example closure --features ok -- mut_move | bat -l cmd
3// clear && cargo run --example closure --features err_05
4// clear && cargo run --example closure --features err_06
5
6//=======
7
8
9//=======
10#[cfg(feature = "ok")]
11pub fn adjoin() {
12    let mut x = 0;
13    let ref_x = &x;
14    let y = |z: u32| -> u32 {
15        println!("inner x = {}", *ref_x);
16        println!("inner x = {:p}", ref_x);
17
18        *ref_x + z
19    };
20
21    println!("1. outer x = {}", x);
22    println!("1. outer x = {:p}", &x);
23    x = y(2);
24    println!("2. outer x = {}", x);
25    println!("2. outer x = {:p}", &x);
26}
27
28
29
30
31//=======
32#[cfg(feature = "okay")]
33pub fn adjoin() {
34    let mut x = 0;
35    let mut y = move |z: u32| {
36        println!("1. inner x {}", x);
37        println!("1. inner x {:p}", &x);
38
39        x = x + z;
40        //x += z;
41
42        println!("2. inner x {}", x);
43        println!("2. inner x {:p}", &x);
44    };
45
46    println!("1. outer x {}", x);
47    println!("1. outer x {:p}", &x);
48    y(2);
49    println!("2. outer x {}", x);
50    println!("2. outer x {:p}", &x);
51}
52
53
54
55
56//=======
57#[cfg(feature = "err_05")]
58pub fn adjoin() {
59    let mut x = 0;
60    let mut y = |z: u32| {
61        println!("1. inner x {}", x);
62        println!("1. inner x {:p}", &x);
63
64        x = x + z;
65
66        println!("2. inner x {}", x);
67        println!("2. inner x {:p}", &x);
68    };
69
70    println!("1. outer x {}", x);
71    println!("1. outer x {:p}", &x);
72    y(2);
73    println!("2. outer x {}", x);
74    println!("2. outer x {:p}", &x);
75}
76
77
78
79
80//=======
81#[cfg(all(
82    not(feature = "ok"),
83    not(feature = "okay"),
84    not(feature = "err_05"),
85    //not(feature = "err_06"),
86))]
87pub fn adjoin() {
88    use aide::*;
89    hello();
90}
91
92// https://github.com/rust-lang/rust/issues/63220#issuecomment-558688508