Rust 如何存储枚举,以便仅通过标识变量来检索它?
我有一个枚举,如:Rust 如何存储枚举,以便仅通过标识变量来检索它?,rust,Rust,我有一个枚举,如: pub enum Component { Position { vector: [f64; 2] }, RenderFn { render_fn: fn(Display, &mut Frame, Entity), }, } 我想将组件存储在一个hashset/hashmap中,在这里它们仅由枚举变量(位置或RenderFn)标识 集合中可以有零个或一个位置和零个或一个RenderFn。我希望能够通过传递标识符/类型(Position/RenderFn
pub enum Component {
Position { vector: [f64; 2] },
RenderFn { render_fn: fn(Display, &mut Frame, Entity), },
}
我想将组件
存储在一个hashset/hashmap中,在这里它们仅由枚举变量(位置
或RenderFn
)标识
集合中可以有零个或一个位置
和零个或一个RenderFn
。我希望能够通过传递标识符/类型(Position
/RenderFn
)来删除/检索它
有没有办法做到这一点而没有任何丑陋的黑客?也许枚举不是解决问题的方法?听起来您想要的是一个结构,而不是枚举变量的集合
struct Component {
position: Option<[f64; 2]>,
render_fn: Option<fn(Display, &mut Frame, Entity)>,
}
struct组件{
位置:选项,
render_fn:选项,
}
如果这可能涉及到许多种类的组件,而它们大多不会全部出现,那么您可能需要类似于板条箱的东西
但要回答您的问题:不,变量不能与其关联的值分离。我稍微澄清了这个问题,一个实体(包含组件集合)应该能够将它们添加/删除到/从中删除。所以一个实体可能只有一个位置组件,甚至没有位置组件@金:然后你可以使用
选项
。或者typemap
如果你将拥有比你所列出的多得多的东西。如果你看不出这些东西怎么会不起作用,我就试试看!泰!在其他ECS库中(我想这就是您试图实现的!),组件不是定义为枚举,而是定义为具有impl
aComponent
trait的结构。我也尝试过这种方法,但如何访问它们的数据?因为那不是他们的共同点。