我如何只匹配枚举的一些而不是所有变体?

时间:2016-11-29 05:11:36

标签: enums rust pattern-matching match

我到处寻找,找不到明确的例子。我希望能够只匹配枚举的一些而不是所有变体。

pub enum InfixToken {
    Operator(Operator),
    Operand(isize),
    LeftParen,
    RightParen,
}

所以我可以在for循环中执行此操作:

let x = match token {
    &InfixToken::Operand(c) => InfixToken::Operand(c),
    &InfixToken::LeftParen => InfixToken::LeftParen,
};

if tokens[count - 1] == x {
    return None;
}

我如何比较前面的标记是否只与枚举的两个变体匹配而不将它与枚举的每个变体进行比较? x也必须与前一个令牌的类型相同。

另外,也许更重要的是,如果isize值无关紧要,只要它是一个操作数,我怎么能匹配一个操作数?

1 个答案:

答案 0 :(得分:1)

您可以在模式中使用_来丢弃值:InfixToken::Operand(_) => branch

要仅在匹配特定变体时执行代码,请将该代码放在匹配分支中以获取这些变体:

match token {
    &InfixToken::Operand(_) |
    &InfixToken::LeftParen => {
        if tokens[count - 1] == token {
            return None;
        }
    }
}

如果满足任一模式,则栏(|)是获取该分支的语法。