Concurrency 您能否提供闭包比当前函数更有效的示例?
根据铁锈手册,以下代码可能导致<代码>关闭可能超过当前功能错误:Concurrency 您能否提供闭包比当前函数更有效的示例?,concurrency,rust,closures,Concurrency,Rust,Closures,根据铁锈手册,以下代码可能导致关闭可能超过当前功能错误: use std::thread; fn main() { let x = 1; thread::spawn(|| { println!("x is {}", x); }); } 思考闭包何时以及如何超过当前函数的发生是抽象的;你能提供一些例子或说明吗 由于您将闭包移动到线程中,并且线程可能比当前函数寿命长(它们不会自动连接到函数端,请使用横梁板条箱来实现此类功能),因此这与在堆上移动它是一样的
use std::thread;
fn main() {
let x = 1;
thread::spawn(|| {
println!("x is {}", x);
});
}
思考闭包何时以及如何超过当前函数的发生是抽象的;你能提供一些例子或说明吗 由于您将闭包移动到线程中,并且线程可能比当前函数寿命长(它们不会自动连接到函数端,请使用
横梁
板条箱来实现此类功能),因此这与在堆上移动它是一样的
如果查看下面的代码段,您可以看到将闭包移动到堆中并返回它是被禁止的。由于线程在借用方面基本上是相同的,所以不能引用线程中的任何内容
fn foo() -> Box<FnOnce()> {
let x = 1;
Box::new(|| {
println!("x is {}", x);
})
}
fn main() {
let f = foo();
}
由于将闭包移动到线程中,并且线程可能比当前函数寿命长(它们不会自动连接到函数端,请使用
横梁
板条箱来实现此类功能),因此这与在堆上移动它是一样的
如果查看下面的代码段,您可以看到将闭包移动到堆中并返回它是被禁止的。由于线程在借用方面基本上是相同的,所以不能引用线程中的任何内容
fn foo() -> Box<FnOnce()> {
let x = 1;
Box::new(|| {
println!("x is {}", x);
})
}
fn main() {
let f = foo();
}
超级有效。谢谢编译器应该为线程提供
move
解决方案。超级有效。谢谢编译器还应该为线程提供move
解决方案。