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

String 如何在Rust中创建静态字符串?,string,rust,String,Rust,有没有办法在Rust中创建静态字符串 我试过这个: static somestring:String=String::new(); 但我有一个错误: 错误:`std::string::string::new`作为常量fn还不稳定 -->src/main.rs:2:29 | 2 |静态somestring:String=String::new(); | 没有解决我的问题,因为它是关于&'static str,而不是String。我需要字符串可以全局寻址。不要将字符串类型与str类型混淆 字符

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

我试过这个:

static somestring:String=String::new();
但我有一个错误:

错误:`std::string::string::new`作为常量fn还不稳定
-->src/main.rs:2:29
|
2 |静态somestring:String=String::new();
|

没有解决我的问题,因为它是关于
&'static str
,而不是
String
。我需要
字符串
可以全局寻址。

不要将
字符串
类型与
str
类型混淆

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

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

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

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

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


正如麦卡顿所建议的,这个问题似乎可以归结为单一模式。您可以在Rust中了解有关其实现的更多信息:

不要将
字符串
类型与
str
类型混淆

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

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

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

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

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


正如麦卡顿所建议的,这个问题似乎可以归结为单一模式。您可以在Rust中了解有关其实现的更多信息:

考虑到它是
静态的
,您可以将其设置为静态字符串片段(
&'static str
),而不是堆分配的
字符串
。另请参阅,可能对
静态字符串是什么(或将是什么)有误解。
static
是全局可寻址的东西(aka随处可见,包括来自其他库的对象)。一个
“static
(注意
)表示可以跨越整个程序生命周期的生命周期;任何
静态
都有一个生存期
静态
。根据定义,
String
是一种堆分配结构,它包含
str
,但也可以扩展大小(通过重新分配)。因此,
静态字符串
没有多大意义。您可能需要一个
“静态字符串”
,请参见其他注释作为对原始问题的注释,将此问题标记为singleton模式的副本感觉很苛刻。答案相同的两个问题不是同一个问题。特别是在这种情况下,当它涉及到字符串时,这些字符串是可拥有和可变的,并且与&“static str”有不同的处理方式。考虑到它是
静态的
,您可以将其设置为静态字符串片段(
&“static str
),而不是堆分配的
字符串
)。另请参阅,可能对
静态字符串是什么(或将是什么)有误解。
static
是全局可寻址的东西(aka随处可见,包括来自其他库的对象)。一个
“static
(注意
)表示可以跨越整个程序生命周期的生命周期;任何
静态
都有一个生存期
静态
。根据定义,
String
是一种堆分配结构,它包含
str
,但也可以扩展大小(通过重新分配)。因此,
静态字符串
没有多大意义。您可能需要一个
“静态字符串”
,请参见其他注释作为对原始问题的注释,将此问题标记为singleton模式的副本感觉很苛刻。答案相同的两个问题不是同一个问题。特别是在这种情况下,当它涉及到字符串时,这些字符串是拥有的和可变的,并且具有与&'static str不同的处理方式。