2016-11-29 108 views
0

我到处寻找并找不到明确的示例。我希望能够匹配一些枚举,而不是所有枚举的变体。如何仅匹配某些枚举,而不是枚举的所有变体?

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

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

如何比较,如果前面的令牌枚举的只有两个变种场比赛没有比较它的每一个变种:

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

这样我就可以在为令牌环执行此枚举? x也必须是前一个标记的相同类型。

此外,也可能更重要的是,我怎么能匹配操作,其中isize值不要紧,只要就像是一个操作数?

+1

**我到处寻找** - [* Rust编程语言*关于'match'的章节](https://doc.rust-lang.org/stable/book/match.html):“The '_'充当'全能',并且会捕获'match'中没有指定的所有可能的值。这是在使用'_'的简介例子之后。 – Shepmaster

回答

1

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

如果特定的变体匹配要仅执行代码,把这些代码在比赛分支为那些变体:

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

酒吧(|)是用于提取分支如果任一图案被满足语法。

+0

这个答案没有编译,因为枚举有四个变体,只有两个匹配。 – bluss

+0

@bluss这是我正在处理的问题。我怎么能包括其余的,以使其详尽无遗,但在哪里比赛对其他两个变种没有任何作用。 – davis