我有一个闭包,我不能改变,我需要在一个新的线程中运行,我需要传递一个变量。这就是我想象中的代码:
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中的等效代码确实有效,所以我想知道这在rust中是否可行,如果可行,那么如何实现。
提前谢谢你。
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();
}