美文网首页Rust语言程序员
Rust 从基础到实践(16) Some

Rust 从基础到实践(16) Some

作者: zidea | 来源:发表于2019-04-14 07:16 被阅读18次
    rust_logo.jpg

    我们之前学习 Vector 和 Hashmap 中一些获取值的方法返回值并非想要的值,而是 Some 类型的值,我们通过 Some 对值进行包裹,将包裹的值可能为空处理交给了使用方来处理。

    fn main(){
        let s = Some('c');
    
        match s {
            Some(i) => println!("{}",i),
            _ => {},
        }
    }
    

    通过 Some 方法创建 Some 类型的 s,然后通过 match 方法来进行处理

    
        if let Some(i) = s{
            println!("{}",i);
        }else {
            {}
        }
    

    其实也可以用这种形式对 Some 进行解构获取值。

    let mut s = Some(0);
    
        loop {
            match s {
                Some(i) => if i > 19 {
                    println!("Quit");
                    s = None;
                }else {
                    println!("{}",i);
                    s = Some(i + 2);
                },
                _ => {
                    break;
                },
            }
        }
    
    0
    2
    4
    6
    8
    10
    12
    14
    16
    18
    Quit
    

    简单地分析一下,Some(0) 进入循环,我们跳出循环条件 break 是 match s 返回值为 None 时候,那么 s 什么时候为 None 呢应该当 s 的包裹值大于 19 时候为 None 就退出了循环。不然就对 s 进行重新赋值,每次都是将其包裹值 + 2 再付给他。可能下面这种方式比较好理解一些。

        while let Some(i) = s {
            if i > 19 {
                println!("Quit");
                s = None;
            }else {
                println!("{}", i);
                s = Some(i + 2);
            }
        }
    

    相关文章

      网友评论

        本文标题:Rust 从基础到实践(16) Some

        本文链接:https://www.haomeiwen.com/subject/kbzdwqtx.html