全域變數
- 提示
- 廢話
- 使用全域變數
- 使用lazy_static!
提示
所有帖子都會不定期添加補充實戰程序中發現的新內容,力爭一篇文章涵蓋所有內容,避免你多次查找文章,所以最好點贊或收藏,時不時回來看看,
廢話
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/257396.html
標籤:其他
