2016-11-29 107 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