如何将字符串分配给可变静态变量?

2023-11-21

我想为全局变量赋值,但它一直出现编译器错误:

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?

还有风格方面的问题:

  1. 铁锈用途snake_case对于变量
  2. SCREAMING_SNAKE_CASE对于常量/静态
  3. CamelCase对于结构/枚举/特征
  4. 4 空格缩进
  5. 变量定义应该是name: type,后面有空格:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将字符串分配给可变静态变量? 的相关文章

随机推荐