我正在尝试使用静态 HashMap<String, Object> 来存储一些我想在未来全局使用和修改的数据。我发现声明这种全局映射的某种方式是使用lazy_static 和互斥锁,以便安全地共享数据。但是,当我想将这些对象作为参考返回时,我遇到了一些所有权问题,就像我在上面的代码中所做的那样:
use std::error::Error;
use std::collections::HashMap;
use std::sync::Mutex;
use super::domain::{Session, SessionRepository}; // object and trait declaration
lazy_static! {
static ref REPOSITORY: Mutex<HashMap<String, Session>> = {
let mut repo = HashMap::new();
Mutex::new(repo)
};
}
impl SessionRepository for REPOSITORY {
fn find(cookie: &str) -> Result<&mut Session, Box<dyn Error>> {
let mut repo = REPOSITORY.lock()?;
if let Some(sess) = repo.get_mut(cookie) {
return Ok(sess);
}
Err("Not found".into())
}
}
所以问题是:有没有办法正确地做到这一点?Rust 中是否存在我可以用来实现这种行为的任何设计模式?
非常感谢!