我想为全局变量赋值,但它一直出现编译器错误:
static mut NameArr: [&'static str; 20] = ["\0"; 20];
fn main() {
unsafe {
static mut S1 :String = "".to_string();
S1.push('\0');
NameArr[0] = S1.as_slice();
}
}
错误:
a.rs:7:29: 7:43 error: mutable statics are not allowed to have destructors
a.rs:7 static mut S1 :String = "".to_string();
^~~~~~~~~~~~~~
a.rs:7:29: 7:43 error: static contains unimplemented expression type [E0019]
a.rs:7 static mut S1 :String = "".to_string();
^~~~~~~~~~~~~~
error: aborting due to 2 previous errors
I have no idea你想要做什么,所以我无法告诉你如何做。
也许你想要如何创建一个全局的、可变的单例?
话虽这么说,我可以帮助解释你的错误:
static mut NameArr: [&'static str; 20] = ["\0"; 20];
这声明了一个可变的全局变量。该变量是一个固定长度的 20 项数组。每个项目都是一个&'static str
,一个字符串文字必须保证在整个程序的生命周期内存活。就是这样'static
means.
static mut S1: String = "".to_string();
这试图创建another可变全局变量,这次它是一个String
,在堆中分配并拥有一块内存的对象。当一个String
超出范围,内存通过释放析构函数。这是第一个错误的根源 - 全局变量不允许有析构函数。此外,您目前还不能调用方法定义全局值时 - 这些方法现在没有运行上下文!
Having 全局可变变量对于 Rust 或任何程序来说,这确实不是一个好主意。有技术原因(例如数据竞争)和程序员原因(对此类代码进行合理化是hard)。您可以查看如何创建一个全局的、可变的单例?如果您确实需要,请获取有关如何操作的说明。
Rust 迫使你使用unsafe
由于这些原因,块来处理可变的全局变量。编译器不再能保证程序的安全性。例如,如果您要调用,存储在数组中的值会发生什么情况S1.clear
?
还有风格方面的问题:
- 铁锈用途
snake_case
对于变量
-
SCREAMING_SNAKE_CASE
对于常量/静态
-
CamelCase
对于结构/枚举/特征
- 4 空格缩进
- 变量定义应该是
name: type
,后面有空格:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)