我可以将枚举用作另一个枚举的值检查器吗?

时间:2018-12-11 14:00:23

标签: enums rust

我有一个可能的子类别值的列表,以及一个需要关联的子类别分组值的列表。用户将输入一个子类别值(必须是整数吗?),我需要检查该值是否在枚举中,但是如果不存在,则不知道该怎么办。

  1. 是否存在“自动”检查方式?我们是否必须通过编程方式对枚举执行测试?
  2. 如果子类别用于分组类别,则如何使用?如何设置,如何阅读?

我认为枚举关系应该是这样的:

#[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;

我认为我缺少真正重要的东西。我不知道枚举是否可行。

1 个答案:

答案 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 {},
        }
    }
}