如何在函数之间共享静态变量?

How is it possible to share a static variable between functions?

我试图在一个函数中定义一个静态变量 f0 并在另一个函数中重新使用它 f1

fn f0() {
    static v: i32 = 10;
}

fn f1() {
    static v: i32; // the compiler reports a syntax error for this statement
}

但是,由于在第二个函数中没有赋值,编译器报错:

expected one of !, (, +, ::, <, or =, found ;

我正在使用 nightly Rust 工具链:rustc 1.40.0-nightly.

这听起来有点奇怪,因为声明静态变量本质上不需要赋值。

应该是什么导致了这个问题?

您不能声明未初始化的静态变量,因为 Rust 编译器假定所有变量都已初始化。

如果你真的想做,你会想要使用std::mem::MaybeUninit

但是,即使您这样做了,也无法解决您最初的问题(在函数之间共享静态变量)。您示例中的每个静态变量都相互独立。

因此,您需要创建一个全局静态变量。