Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 如何存储枚举,以便仅通过标识变量来检索它?_Rust - Fatal编程技术网

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
a
Component
trait的结构。我也尝试过这种方法,但如何访问它们的数据?因为那不是他们的共同点。