我有一个可能的子类别值的列表,以及一个需要关联的子类别分组值的列表。用户将输入一个子类别值(必须是整数吗?),我需要检查该值是否在枚举中,但是如果不存在,则不知道该怎么办。
我认为枚举关系应该是这样的:
#[derive(Debug)]
pub enum Subtypes {
acost,
bcost,
//... other subtypes
}
#[derive(Debug)]
pub enum Grouping {
Exp(Subtypes),
//...other grouping associated with different subtypes
}
如何基于分组枚举定义一个新变量,以及如何访问它?
// this doesn't work!!
let group = Grouping::Exp;
我认为我缺少真正重要的东西。我不知道枚举是否可行。
答案 0 :(得分:1)
您对枚举是正确的,可以在枚举中嵌入其他数据。我认为您将需要遵循类似的模式。
这里有一些代码可以帮助解释,取自GitHub仓库。首先,我们将一个结构嵌入到枚举中:
struct ConsoleOutput {}
pub enum OutputTypes {
Console(ConsoleOutput),
}
这还不足以使其可用;首先,需要一家工厂。实际上,工厂会分配嵌入在枚举中的结构:
pub struct OutputFactory {}
impl OutputFactory {
pub fn get() -> OutputTypes {
OutputTypes::Console(ConsoleOutput {})
}
}
实际的实现需要更多一点。
此后,在枚举上实现一个特征,并且该特征包含逻辑。我认为这是您需要工作的领域。
pub struct ShellTypes {}
pub trait OutputTrait {
fn generate(&self) -> ShellTypes;
}
impl OutputTrait for OutputTypes {
fn generate(&self) -> ShellTypes {
match *self {
_ => return ShellTypes {},
}
}
}