IT技术之家

首页 > Android

Android

Rust踩坑日记(二)Option,Some和None_RavenRayRust_rust some

发布时间:2022-10-24 18:00:20 Android 0次 标签:rust
Option,Some和NoneOption是Rust中核心的枚举类型,其提出是为了让空值得到有效的处理。任何可能为空值的结果都应被处理为Option。Option<T>的值,有Some(T)和None两种。常用的取值方法unwarp()当Some(T)调用时,能将T类型的值取出,若T未实现Copy trait,则发生所有权转移。当None调用时,若在编译阶段,会由编译器报错,无法通过编译;若在运行阶段,程序会Panic。为了防止None调用unwarp(),除了进行None检...

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。