Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Concurrency 您能否提供闭包比当前函数更有效的示例?_Concurrency_Rust_Closures - Fatal编程技术网

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
解决方案。