如何改变静态引用?

How to mutate static ref usize?

提问人:GirkovArpa 提问时间:8/9/2021 更新时间:8/9/2021 访问量:354

问:

lazy_static! {
  static ref MY_GLOBAL: Mutex<usize> = Mutex::new(100);
}
MY_GLOBAL.lock().unwrap() += 1;

这段代码给了我这些错误:

cannot use `+=` on type `MutexGuard<'_, usize>`
cannot assign to this expression

如何变异?MY_GLOBAL

螺纹安全 全局变量 惰性静态

评论


答:

4赞 Kevin Reid 8/9/2021 #1

您的代码只需要一个:*

*MY_GLOBAL.lock().unwrap() += 1;

的结果是一个 ,正如编译器所指出的,它取消了对 的引用,因此要修改包含的 useize,您需要取消引用。MY_GLOBAL.lock().unwrap()MutexGuard<'_, usize>usize*

Rust 通常会在需要时自动插入引用和取消引用(特别是对于方法调用),但对于赋值,您必须显式取消引用,以便左侧正是您打算替换的左侧。usize