全局变量

2021/02/08 08:12
阅读数 60


提示

所有帖子都会不定期添加补充实战过程中发现的新内容,力争一篇文章涵盖所有内容,避免你多次查找文章,所以最好点赞或收藏,时不时回来看看。


废话

rust不建议全局变量,但实际应用又需要,所以可以用下面的方式使用全局变量,全局变量使用static来声明。用static声明的变量生命周期是整个程序,从启动到退出,它占用的内存空间也不会在执行过程中回收,这也是rust中唯一声明全局变量的方法,全局变量使用有一些限制,都是为了防止你写出不安全的代码:
1.全局变量在声明时要初始化成编译期可确定的常量,不能是执行时才能确定的表达式、语句、函数调用的结果;
2.带有mut修饰的全局变量,在使用时必须要用unsafe操作;

使用全局变量

static GA: i32 = 0;
static mut GB: i32 = 1;
static mut PERSON: Person = Person {
   
     age: 9};

struct Person {
   
     
    age: u8,
}

fn main() {
   
     
    println!("GA is {}", GA);  // 如果全局变量不修改,应该用常量更合适
    unsafe {
   
       // 修改可变的全局变量是不安全的,要unsafe
        GB = 3;
        println!("GB is {}", GB);
        PERSON.age = 19;
        println!("person.age is {}", PERSON.age);
    }
}

执行结果:

GA is 0
GB is 3
person.age is 19

使用lazy_static!

lazy_static!是个第三方的东西,目前没有找到如何修改全局变量(如有知道请留言告诉我),使用前要在Cargo.toml里添加

[dependencies]
lazy_static = "1.4.0"
use lazy_static::lazy_static;

struct Person {
   
     
    age: u8,
}

fn main() {
   
     
    // static 懒加载,无需在编译时计算其值,在首次访问时进行初始化
    lazy_static! {
   
     
        static ref GPERSON: Person = Person {
   
     age: 9};
    }

    println!("person.age is {}", GPERSON.age);
}

执行结果:

person.age is 9
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部