Option,Some和None
Option是Rust中核心的枚举类型,其提出是为了让空值得到有效的处理。任何可能为空值的结果都应被处理为Option。
Option<T>的值,有Some(T)和None两种。
常用的取值方法
unwarp()
- 当Some(T)调用时,能将T类型的值取出,若T未实现Copy trait,则发生所有权转移。
- 当None调用时,若在编译阶段,会由编译器报错,无法通过编译;若在运行阶段,程序会Panic。
- 调用unwarp的Option不要求是mut的。
- 为了防止None调用unwarp(),除了进行None检查外,还可以选各站调用unwarp_or系列方法,让程序在检测到None时自动进行额外处理。
let a_string_option = Some(String::new());
let res:String = a_string_option.unwrap_or_default();
if/while let
if let Some(a_T) = a_option {
//a_T生命周期仅在花括号内生效。
//a_option将发生move或copy。
}
while let Some(a_T) = a_option {
//当a_option 为None时退出循环。
//若T没有实现Copy,则需要在花括号中为a_option进行修改。
}
match
match a_string_option {
Some(_a_string) =>println!("{}",_a_string),//匹配成功
_=>{}//'_'表示其余匹配结果,在这里除了Some,自然是None。
}
replace()与take()
- replace方法顾名思义,用参数的值替换原Option内的值。将原值用Some包装后返回。
- take方法相当于replace的空值版本,原来的Option变量留下None值。
- 执行replace和take方法后的Option仍是有效的,并未发生move。
- replace和take方法的Option都会要求mut。