此问题在此处已有答案:
How do I create a global, mutable singleton?(7个答案)
3天前关闭。
我是新来的 rust ,不能理解下面的问题。我试图存储的特点,动物的载体。
我的实现如下。
mod TestAnimal {
use crate::stack;
pub trait Animal {
fn diagnose(&self) -> Result<(), stack::service::ServiceError>;
}
pub struct Hospital {
animals: Vec<Box<dyn Animal>>,
}
static mut HOSPITAL: Hospital = Hospital { animals: Vec::new() };
impl Hospital {
pub fn add_animal(&mut self, animal: Box<dyn Animal>) {
self.animals.push(animal);
}
}
pub fn get_hospital() -> &'static Hospital {
unsafe {
return &HOSPITAL;
}
}
}
#[test]
fn test_hospital() {
pub struct Cat;
impl TestAnimal::Animal for Cat {
fn diagnose(&self) -> Result<(), stack::service::ServiceError> {
return Ok(());
}
}
TestAnimal::get_hospital().add_animal(Box::new(Cat {}));
}
我面临的问题如下。
error[E0596]: cannot borrow data in a `&` reference as mutable
--> src/main.rs:45:5
|
45 | TestAnimal::get_hospital().add_animal(Box::new(Cat {}));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
1条答案
按热度按时间0sgqnhkj1#
看起来您正在尝试变更静态变量。通常这是不安全的,因为多个线程同时编辑一个值可能会导致问题。您可以通过将变量 Package 在mutex中来确保安全。互斥体将确保一次只有一个线程可以变更变量。
也就是说,有时你会发现你实际上并不需要静态变量。可变的静态变量通常会让代码更难理解。你可以考虑这样做: