rust - 我如何存储枚举以便仅通过识别变体来检索它?

标签 rust

我有一个像这样的枚举:

pub enum Component {
    Position { vector: [f64; 2] },
    RenderFn { render_fn: fn(Display, &mut Frame, Entity), },
}

我想将 Component 存储在哈希集/ HashMap 中,它们仅由它们的枚举变体(PositionRenderFn)标识.

集合中可以有零个或一个Position和零个或一个RenderFn。我希望能够通过传递标识符/类型 (Position/RenderFn) 来删除/检索它。

有没有什么办法可以做到这一点而不需要任何丑陋的黑客攻击?也许枚举不是解决之道?

最佳答案

听起来您想要一个结构,而不是枚举变体的集合。

struct Component {
    position: Option<[f64; 2]>,
    render_fn: Option<fn(Display, &mut Frame, Entity)>,
}

如果这可能涉及许多 种组件,而且它们大多不会全部出现,那么也许您需要像 typemap 这样的东西 crate 。

但要回答您的问题:不,变体不能与其相关值分开。

关于rust - 我如何存储枚举以便仅通过识别变体来检索它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45837189/

相关文章:

rust - 类型别名引入错误 : "cast requires that ` *variable *` is borrowed for ` 'static`"

compiler-construction - 在 Rust 中,Option 被编译成运行时检查还是指令跳转?

amazon-s3 - 使用 rusoto 将字符串上传到 S3

image - Rust 打开文件扩展名以外格式的图像

rust - 当一个对象可能实现多个特征时,如何创建对特征的引用结构?

rust - 克隆存储闭包的结构

rust - 如何对我的 Cargo.toml 的每个功能单独运行 cargo 检查/测试?

generics - 如何表达函数的类型约束以允许添加不同类型的值?

rust - 我可以相信两个相同结构的序列化是相同的吗?

rust - 将 vec<&String> 转换为 vec<String> 哪种方式更好