if let
在一些场合下,用 match 匹配枚举类型并不优雅。
if let 在这样的场合要简洁得多,并且允许指明数种失败情形下的选项:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| let s = Some("从0到Go语言微服务架构师"); let s1: Option<i32> = None; let s2: Option<i32> = None;
// 如果 `let` 将 `s` 解构成 `Some(i)`,则执行语句块(`{}`) if let Some(i) = s { println!("已上车 {:?}!", i); }
// 如果要指明失败情形,就使用 else: if let Some(i) = s1 { println!("Matched {:?}!", i); } else { // 解构失败。切换到失败情形。 println!("不匹配。"); };
// 提供另一种失败情况下的条件。 let flag = false; if let Some(i) = s2 { println!("Matched {:?}!", i); // 解构失败。使用 `else if` 来判断是否满足上面提供的条件。 } else if flag { println!("不匹配s2"); } else { // 条件的值为 false。于是以下是默认的分支: println!("默认分支"); }; 输出 已上车 "从0到Go语言微服务架构师"! 不匹配。 默认分支 ```
# while let ``` // 将 `optional` 设为 `Option<i32>` 类型 let mut num = Some(0);
// 当 `let` 将 `optional` 解构成 `Some(i)` 时,就 // 执行语句块(`{}`)。否则就 `break`。 while let Some(i) = num { if i > 9 { println!("{},quit!",i); num = None; } else { println!("`i` is `{:?}`. Try again.", i); num = Some(i + 1); } } ``` <br/>
|
添加微信 |
公众号更多内容 |
|
|