Rust 从基础到实践(16) Some

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)