我尝试使用get_mut()
方法获取对OnceLock
底层数据的可变引用,但出现错误
mod OL {
use std::sync::OnceLock;
static CELL: OnceLock<i32> = OnceLock::new();
pub fn set_cell_val(val: i32) {
CELL.set(val);
}
pub fn get_mut_ref() -> &'static mut i32 {
CELL.get_mut().unwrap()
}
}
fn main() {
println!("Hello, world!");
}
字符串
错误类型
error[E0596]: cannot borrow immutable static item `CELL` as mutable
--> src/main.rs:11:9
|
11 | CELL.get_mut().unwrap()
| ^^^^^^^^^^^^^^ cannot borrow as mutable
For more information about this error, try `rustc --explain E0596`.
型
1条答案
按热度按时间au9on6nz1#
OnceLock
是分配 * 一次 * 的单元。根据定义,在被分配之后,它不能再改变。get_mut()
确实存在,但它服务于利基用例,绝对不是你的用例。OnceLock
不适合你。您需要的是
Mutex
或RwLock
。它们可以多次更改:字符串
如果你想要一个变化的值,也是惰性初始化的,你可以使用
OnceLock<Mutex>
。