Решил создать свой блог, где собираюсь разместить статьи со своего сайта и короткие заметки и размышления.
Работа с глобальными переменными в Rust
Глобальные переменные в Раст объявляются так: static ИМЯ:тип=значение . Например: static mut COUNT:i32=0; Но если ми попробуем объявить вектор static mut MYVECT:Vec =Vec::new(); , то получим ошибку при компиляции: «calls in statics are limited to struct and enum constructors” Попытка сделать так static mut MYVECT: Option<Vec<i32>>=None; вызовет другую ошибку “destructors in statics are an unstable feature” и отправит нас искать счастья в ночные сборки. Так было в Rust 1.13, такая же ситуация и сейчас в Rust 1.15. Для решения этой проблемы есть нескоько способов. Способ первый- Ленивая инициализация с помощью макроса lazy_static! с использованием Mutex. #[macro_use] extern crate lazy_static; use std::sync:: {Mutex,RwLock}; lazy_static! { pub static ref MUTEX_VEC:Mutex<Vec<u32>>= Mutex::new(Vec::new()); } fn main() { let mut v1=MUTEX_VEC.lock().unwrap(); *v1 =vec!(1,2,3); v1.push(4); println!("{:?}",*v1); } Этот ...
Комментарии
Отправить комментарий