我们之前学习 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);
}
}