我到处都看过,找不到清晰的示例。我希望只能匹配枚举的某些变体,而不是全部变体。

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

因此,我可以在 token 的for循环中执行此操作:
let x = match token {
    &InfixToken::Operand(c) => InfixToken::Operand(c),
    &InfixToken::LeftParen => InfixToken::LeftParen,
};

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

如果前面的标记与枚举的仅两个变体匹配,而又不与枚举的每个变体进行比较,该如何比较? x还必须与前面的 token 具有相同的类型。

此外,而且可能更重要的是,如何匹配isize值无关紧要的操作数,只要它是操作数即可?

最佳答案

您可以在模式中使用_来丢弃值:InfixToken::Operand(_) => branch。如果整个模式是_,它将匹配任何内容。
要仅在匹配特定变体的情况下执行代码,请将该代码放入这些变体的match分支中:

match token {
    &InfixToken::Operand(_) |
    &InfixToken::LeftParen => {
        if tokens[count - 1] == token {
            return None;
        }
    }
    _ => {}
}
bar(|)是在满足任一模式的情况下进行该分支的语法。

09-05 22:41