In Rust global variables are declared with the static
keyword.在 C 中,静态变量(具有翻译单元范围)和非静态全局变量(具有真正的全局范围)之间存在差异。在 Rust 中进行同样的区分是否有用且可能?如果不是,为什么不,如果是,怎么做?
最佳答案
静态变量与文件中的其他内容具有相同的范围规则。如果您希望它可以从任何地方访问,您可以将其设为 pub
,否则它将是私有(private)的:
// accessible from inside the crate
static A: f32 = 3.141;
mod secret {
// accessible from inside this module
static B: u8 = 42;
}
mod not_secret {
// accessible from inside the crate
pub static C: u8 = 69;
}
pub mod public {
// accessible from anywhere
pub static D: u16 = 420;
}
// accessible from anywhere
pub static E: u16 = 1337;
请注意,当您将代码放入另一个文件时,这将是 mod
,即你可以有一个文件 secret.rs
并把 secret
的内容该文件中的模块等这意味着静态变量在默认情况下是特定于文件的,就像在 C 中一样,除了
static
s 在入口点文件中(例如 A
在上面的示例中,入口点文件通常是 main.rs
或 lib.rs
),这些在整个 crate 中都可用。您可以通过使用 pub
声明它们使它们“真正全局化”。 .
关于rust - Rust 的静态变量的作用域是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66314148/