Как изменить размер статической ссылки?

avatar
GirkovArpa
9 августа 2021 в 01:54
77
1
0
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?

Источник

Ответы (1)

avatar
Kevin Reid
9 августа 2021 в 04:02
3

Вашему коду нужен только один *:

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

The result of MY_GLOBAL.lock().unwrap() is a MutexGuard<'_, usize>, as the compiler noted, which dereferences to a usize, so to modify the containing usize you need a dereference *.

Rust часто автоматически вставляет ссылку и разыменование, когда это необходимо (особенно для вызовов методов), но для присваивания вы должны явно разыменовать, чтобы левая сторона была именно той usize, которую вы собираетесь заменить.