< 返回版块

kaixinbaba 发表于 2022-04-26 22:00

Tags:lazy_static,HashMap,trait object

我给个最小的实现 demo


use std::collections::HashMap;

use lazy_static::lazy_static;

lazy_static! {
    pub static ref CACHE: HashMap<&'static str, &'static dyn MyTrait> = {
        let map = HashMap::new();
        map.insert("action1", &MyTraitImpl1 {});
        map.insert("action2", &MyTraitImpl2 {});
        map.insert("action3", &MyTraitImpl3 {});

        map
    };
}

pub trait MyTrait {
    /// .
    ///
    /// # Examples
    ///
    /// ```
    /// // Example template not implemented for trait functions
    /// ```
    fn action();
}

pub struct MyTraitImpl1;

impl MyTrait for MyTraitImpl1 {
    fn action() {
        println!("action1");
    }
}

pub struct MyTraitImpl2;
impl MyTrait for MyTraitImpl2 {
    fn action() {
        println!("action2");
    }
}
pub struct MyTraitImpl3;
impl MyTrait for MyTraitImpl3 {
    fn action() {
        println!("action3");
    }
}

fn main() {
    println!("Hello, world!");
}


我的想法是使用一个静态的全局 HashMap 作为只读缓存,这个 HashMap 里存的是 trait object,但是编译过不了,求助各位大大,这种设计 Rust 应该怎么写?能不能必须要使用 unsafe,或者必须要用 unsafe 的话,又要怎么写?

感谢

评论区

写评论
作者 kaixinbaba 2022-04-26 22:30

万分感谢。。。。。。。。太菜了。。。

--
👇
gwy15: 多看看编译器的错误提示,提示得很清楚了

https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=d0b4b0ef98c91c7388b9d4622856df31

gwy15 2022-04-26 22:16

多看看编译器的错误提示,提示得很清楚了

https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=d0b4b0ef98c91c7388b9d4622856df31

作者 kaixinbaba 2022-04-26 22:01

笔误:能不能必须要使用 unsafe 应该是 能不能不使用 unsafe

1 共 3 条评论, 1 页