Rust 文档有一个用于 OnceLock 的 get_mut() 方法,它返回一个可变引用。但以下代码无法编译。我错过了什么?
use std::sync::{OnceLock};
#[derive(Clone)]
struct System {comp: Vec<i32>}
static GLOB : OnceLock<System> = OnceLock::new();
impl System {
fn new() -> Self {Self{comp:Vec::new()}}
}
fn modify(global: &mut System) {
global.comp.push(42);
}
fn main() {
let sys:Box<System> = Box::new(System::new());
GLOB.get_or_init(|| *sys);
let global : &mut System = GLOB.get_mut().unwrap();
println!("global size is {}", global.comp.len());
modify(global);
println!("global size is {}", global.comp.len());
}
真的有可能获得可变引用吗?我应该如何使用 get_mut() ?
您无法获得对
static
的可变引用,除非您将其标记为可变,尽管这是不鼓励的,而且很可能不是您想要的。但您不必将 OnceLock
与静态一起使用:
let mut glob: OnceLock<System> = OnceLock::new();
let global: &mut System = glob.get_mut().unwrap();