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

时间:2019-05-03 21:01:43

标签: string rust

有没有一种方法可以在Rust中创建静态字符串?

我尝试过:

static somestring: String = String::new();

但我收到此错误:

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

How to create a static string at compile time不能解决我的问题,因为它是关于&'static str而不是String的。我需要String是可全局寻址的。

1 个答案:

答案 0 :(得分:1)

请勿将String类型与str类型混淆。

What are the differences between Rust's `String` and `str`?

字符串是可变的,并且总是堆分配的。

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

您的问题似乎使静态的思想和全球适用的的思想混淆。静态字符串应理解为随程序一起编译的字符串,并且可以完整使用(具有“静态生存期”),这些字符串通常以&'static str的形式出现。这样的字符串自然不会发生突变。但是您可以从中创建一个字符串。

如果您想要的是可全局访问的String并想在 static 中定义它,考虑到问题中缺少上下文,我可能建议使用宏lazy-static:

https://crates.io/crates/lazy_static

正如麦卡顿(Mcarton)所说,这个问题似乎可以归结为单例模式。您可以在How do I create a global, mutable singleton?

上了解有关在Rust中实现的更多信息。