Rust if let

if let

对于一些使用情况,匹配很尴尬。例如:

// Make `optional` of type `Option
 
  `
let optional = Some(7);

match optional {
    Some(i) => {
        println!("This is a really long string and `{:?}`", i);
        // ^ Needed 2 indentations just so we could destructure
        // `i` from the option.
    },
    _ => {},
    // ^ Required because `match` is exhaustive. Doesn't it seem
    // like wasted space?
};

 

if let 是清洁器用例,另外允许指定的各种失败选项:

fn main() {
    // All have type `Option
 
  `
    let number   = Some(7);
    let letter: Option
  
    = None; let emoticon: Option
   
     = None; // The `if let` construct reads: "if `let` destructures `number` into // `Some(i)`, evaluate the block (`{}`). Else do nothing. if let Some(i) = number { println!("Matched {:?}!", i); } // If you need to specify a failure, use an else: if let Some(i) = letter { println!("Matched {:?}!", i); } else { // Destructure failed. Change the failure case. println!("Didn't match a number. Let's go with a letter!"); }; // Provide an altered failing condition. let i_like_letters = false; if let Some(i) = emoticon { println!("Matched {:?}!", i); // Destructure failed. Evaluated the condition to see if this branch // should be taken. } else if i_like_letters { println!("Didn't match a number. Let's go with a letter!"); // The condition evaluated false. This branch is the default. } else { println!("I don't like letters. Let's go with an emoticon :)!"); }; } 
   
  
 

也可以参考:

enumOption, 和 RFC

        原文作者:Rust教程
        原文地址: https://www.yiibai.com/rust/flow_control_if_let.html
        本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
    点赞