<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 匹配 > [match.md](https://github.com/rust-lang/rust/blob/master/src/doc/book/match.md) commit fc4bb5f77060b5822f25edbabbdf7a1d48a7f8fe 一個簡單的[`if`](#)/`else`往往是不夠的,因為你可能有兩個或更多個選項。這樣`else`也會變得異常復雜。Rust 有一個`match`關鍵字,它可以讓你有效的取代復雜的`if`/`else`組。看看下面的代碼: ~~~ let x = 5; match x { 1 => println!("one"), 2 => println!("two"), 3 => println!("three"), 4 => println!("four"), 5 => println!("five"), _ => println!("something else"), } ~~~ `match`使用一個表達式然后基于它的值分支。每個分支都是`val => expression`這種形式。當匹配到一個分支,它的表達式將被執行。`match`屬于“模式匹配”的范疇,`match`是它的一個實現。有[一個整個關于模式的部分](#)講到了所有可能的模式。 那么這有什么巨大的優勢呢?這確實有優勢。第一,`match`強制*窮盡性檢查*(*exhaustiveness checking*)。你看到了最后那個下劃線開頭的分支了嗎?如果去掉它,Rust 將會給我們一個錯誤: ~~~ error: non-exhaustive patterns: `_` not covered ~~~ Rust 試圖告訴我們忘記了一個值。編譯器從`x`推斷它可以是任何正的 32 位整型值;例如從 1 到 2,147,483,647。`_`就像一個*匹配所有*的分支,它會捕獲所有沒有被`match`分支捕獲的所有可能值。如你所見,在上個例子中,我們提供了 1 到 5 的`mtach`分支,如果`x`是 6 或者其他值,那么它會被`_`捕獲。 `match`也是一個表達式,也就是說它可以用在`let`綁定的右側或者其它直接用到表達式的地方: ~~~ let x = 5; let number = match x { 1 => "one", 2 => "two", 3 => "three", 4 => "four", 5 => "five", _ => "something else", }; ~~~ 有時,這是一個把一種類型的數據轉換為另一個類型的好方法。 ### 匹配枚舉(Matching on enums) `match`的另一個重要的作用是處理枚舉的可能變量: ~~~ enum Message { Quit, ChangeColor(i32, i32, i32), Move { x: i32, y: i32 }, Write(String), } fn quit() { /* ... */ } fn change_color(r: i32, g: i32, b: i32) { /* ... */ } fn move_cursor(x: i32, y: i32) { /* ... */ } fn process_message(msg: Message) { match msg { Message::Quit => quit(), Message::ChangeColor(r, g, b) => change_color(r, g, b), Message::Move { x: x, y: y } => move_cursor(x, y), Message::Write(s) => println!("{}", s), }; } ~~~ 再一次,Rust編譯器檢查窮盡性,所以它要求對每一個枚舉的變量都有一個匹配分支。如果你忽略了一個,除非你用`_`否則它會給你一個編譯時錯誤。 與之前的`match`的作用不同,你不能用常規的`if`語句來做這些。你可以使用[if let](#)語句,它可以被看作是一個`match`的簡略形式。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看