rust - Rust 的静态变量的作用域是什么?

标签 rust static global-variables

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.rslib.rs ),这些在整个 crate 中都可用。您可以通过使用 pub 声明它们使它们“真正全局化”。 .

关于rust - Rust 的静态变量的作用域是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66314148/

相关文章:

c - 长途功能调用控制

rust - Option<&T> 如何实现复制

ruby-on-rails-3 - Rails 3 引擎和静态 Assets

c++ - 在共享库中初始化全局数据的最佳方法是什么?

asp.net - 在静态类中存储连接 (ASP.NET)

C编译器优化(gcc) : Automatically Inline a non-static function vs static function

javascript - Node 定义我需要在模块中使用的唯一变量

rust - 如何使用 Serde 反序列化带有读者引用的结构?

rust - 高阶宏

rust - 如何在Rust中将变量作为字符串文字传递?