我到处都看过,找不到清晰的示例。我希望只能匹配枚举的某些变体,而不是全部变体。
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(|
)是在满足任一模式的情况下进行该分支的语法。