如何在 Rust 中创建静态字符串?

LJ *_*ain 1 string rust

有没有办法在 Rust 中创建静态字符串?

我试过这个:

static somestring: String = String::new();
Run Code Online (Sandbox Code Playgroud)

但我收到了这个错误:

error: `std::string::String::new` is not yet stable as a const fn
 --> src/main.rs:2:29
  |
2 | static somestring: String = String::new();
  |
Run Code Online (Sandbox Code Playgroud)

如何在编译时创建静态字符串并不能解决我的问题,因为它是关于&'static str,而不是String. 我需要String全局可寻址。

Jos*_*sep 5

不要将String类型与str类型混淆。

Rust 的 `String` 和 `str` 有什么区别?

String 是可变的并且总是堆分配的。

通常以 &str 表示的 str 是不可变的,它只是一个字符串的视图。

您的问题似乎混淆了staticglobal adressable 的概念。您可以将 (&'static str) 称为具有“静态生命周期”的字符串。具有“静态生命周期”的字符串很常见,因为它们(大部分)表示程序中的硬编码字符串。“静态生命周期”意味着对象(在本例中为字符串)将一直存在到程序结束。大多数“静态对象”在编译时都是已知的。考虑到这一点应该很自然,因为硬编码字符串在编译时是已知的。这些字符串不能变异。

另一方面,字符串是可变的。你可以从 &'static str 生成一个字符串。

鉴于问题中缺乏上下文,如果您想要的是一个全局可寻址的字符串并希望将其定义为静态,我可能会建议使用宏惰性静态:

https://crates.io/crates/lazy_static

正如 mcarton 所建议的,这个问题似乎归结为单例模式。你可以在这里了解更多关于它在 Rust 中的实现:如何创建一个全局的、可变的单例?