#closures #variables #async #macro

closure_capture

捕获变量被移动到闭包或异步块中

1 个不稳定版本

0.1.0 2024年6月24日

#1508Rust 模式

每月24次下载

Apache-2.0

7KB
76

closure-capture

捕获变量被移动到闭包或异步块中

Latest version Documentation License

使用 move 关键字时,闭包中使用的所有外部变量将被移动到闭包中。

有时你可能只需要移动几个变量,其余变量保持引用。

此时,你可以使用 closure-capture 指定要捕获的变量。

用法

链接 closure-capture

cargo.toml

[dependencies]
closure-capture = "0.1"

将变量 a 和 b 移动到闭包中

fn main() {
    let a = 1;
    let b = 2;
    
    std::thread::spawn(closure_capture::closure!([a, b] () {
        println!("{}", a + b)
    }))
    .join()
    .unwrap();
}

将变量 a 和 b 移动到闭包中并修改 a

fn main() {
    let a = 1;
    let b = 2;
    
    std::thread::spawn(closure_capture::closure!([mut a, b] () {
        a += b;
        println!("{}", a)
    }))
    .join()
    .unwrap();
}

与异步块一起使用

#[tokio::main]
async fn main() {
    let a = 1;
    let b = 2;

    tokio::spawn(closure_capture::async_block!([mut a, b] async {
        a += b;
        println!("{}", a)
    }))
    .await
    .unwrap();
}

无运行时依赖