我有一个不能更改的闭包,我需要在一个新线程中运行它,并且我需要向它传递一个变量.这是我想象的代码的样子:

use std::thread;

fn main() {
    // I can not influence this closure, but this is what it looks like
    let handle = move |data: i32| {
        println!("Got {data}")
    };

    let foo = 123;
    // This doesn't work
    thread::spawn(handle).arg(foo).join()
}

在Python中等效的代码确实可以工作,所以我想知道在Ruust中这是否可能,如果是的话,那么是如何实现的.

提前谢谢您.

推荐答案

thread::spawn()的文档表明它希望输入不带参数的闭包.因此,您不能直接使用handle闭包.但是,您可以创建一个不带参数的新闭包来调用handle闭包,如下所示:

use std::thread;

fn main() {

    let handle = move |data: i32| {
        println!("Got {data}")
    };

    let foo = 123;

    thread::spawn(move || {handle(foo)}).join();
}

Rust相关问答推荐

如何找到一个数字在二维数组中的位置(S)?

访问Rust中的隐藏变量

通过不同的字段进行散列和排序的 struct (需要不同的EQ实现)

integer cast as pointer是什么意思

如何编写一个以一个闭包为参数的函数,该函数以另一个闭包为参数?

Rust中WPARAM和VIRTUAL_KEY的比较

应为关联类型,找到类型参数

如何对一个特征的两个实现进行单元测试?

Rust 如何返回大类型(优化前)?

更新 rust ndarray 中矩阵的一行

相当于 Rust 中 C++ 的 std::istringstream

Rust 为什么被视为borrow ?

在不安全的 Rust 中存储对 struct 内部数据的静态引用是否合法?

仅当函数写为闭包时才会出现生命周期错误

如何判断服务器是否正确接收数据

类型判断模式匹配panic

当你删除一个存在于堆栈中的值时,为什么 rust 不会抱怨

使用 rust 在 google cloud run (docker) 中访问环境变量的适当方法

以下打印数组每个元素的 Rust 代码有什么问题?

为什么这里需要类型注解?