前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >38.if let 和 while let

38.if let 和 while let

原创
作者头像
面向加薪学习
修改2022-09-04 11:52:28
4310
修改2022-09-04 11:52:28
举报
文章被收录于专栏:面向加薪学习

if let

在一些场合下,用 match 匹配枚举类型并不优雅。

if let 在这样的场合要简洁得多,并且允许指明数种失败情形下的选项:

代码语言:txt
复制
    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);
        }
    }
代码语言:txt
复制

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • if let
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档