如何使用Rust OnceLock get_mut()方法?

问题描述 投票:0回答:1

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() ?

rust global-variables documentation global mutable
1个回答
0
投票

您无法获得对

static
的可变引用,除非您将其标记为可变,尽管这是不鼓励的,而且很可能不是您想要的。但您不必将
OnceLock
与静态一起使用:

let mut glob: OnceLock<System> = OnceLock::new();
let global: &mut System = glob.get_mut().unwrap();
© www.soinside.com 2019 - 2024. All rights reserved.