Rust 中的全局状态管理与宏编程
1. Rust 中的全局状态管理
在 Rust 里处理全局状态颇具挑战性,直接操作可能会带来诸多问题。例如,使用 thread_local! 宏定义全局状态时,代码会变得复杂且易出错。
thread_local! {
static POPULAR_BABY_NAMES_2021: Arc<Mutex<Option<Vec<String>>>> =
Arc::new(Mutex::new(None));
}
要初始化这个全局状态,需要在代码里(如 main() 函数)进行如下操作:
let arc = POPULAR_BABY_NAMES_2021.with(|arc| arc.clone());
let mut inner = arc.lock().expect("unable to lock mutex");
*inner = Some(vec![
String::from("Olivia"),
String::from("Liam"),
String::from("Emma"),
String::from("Noah"),
]);
这种做法不仅代码繁琐,而且在初始化全局数据时必须格外谨慎,要保证在其他代码访问这些值之前正确地按顺序完成初始化。
为了更便捷地处理全局状态,我
超级会员免费看
订阅专栏 解锁全文
2650

被折叠的 条评论
为什么被折叠?



