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
Rust 指定'main'中值的静态生存期,以便回调可以借用_Rust - Fatal编程技术网

Rust 指定'main'中值的静态生存期,以便回调可以借用

Rust 指定'main'中值的静态生存期,以便回调可以借用,rust,Rust,我有一个变量,用于跟踪由处理程序闭包更新的状态。如下所示: fn main() { let val = 1; add_handler(|| val += 1); println!("{}", val); } add\u handler函数在另一个库中声明,其类型为 fn add_handler<F>(listener: F) where F: FnMut() + 'static 因为val是在main中声明的,我知道它将在整个程序中保持有效,但是编译器显然

我有一个变量,用于跟踪由处理程序闭包更新的状态。如下所示:

fn main() {
    let val = 1;
    add_handler(|| val += 1);
    println!("{}", val);
}
add\u handler
函数在另一个库中声明,其类型为

fn add_handler<F>(listener: F) where F: FnMut() + 'static
因为
val
是在
main
中声明的,我知道它将在整个程序中保持有效,但是编译器显然不知道这一点,我不能将
val
移动到闭包中,因为我需要稍后使用它

这与类似,但我无法在
add\u handler
的定义中去掉
静态的
生存期,因为我不控制定义

这不是的副本,因为我无法将
val
移动到闭包中

我可以使
val
成为一个全局原子,但似乎应该有一种更干净、更惯用的方式来告诉编译器
val
的寿命足够长


如何做到这一点?

我知道它将在整个程序中都有效-实际上不会,这就是为什么会出现这种错误。Rust
main
函数在OS
main
函数退出之前退出。在锈迹
main
退出后,线程可以并且确实继续运行。这甚至没有涵盖同一范围内多个变量的销毁顺序的细节。@Shepmaster这个问题似乎包含了这一问题的所有要点。我很乐意把它标记为复制品。