理解基本定义
1. 首先Option是一个rust标准库的一个枚举类,他存在的目的就是为了null值,既不存在的值,go/java都有nil null的存在,于是rust使用option none来表示。
enum Option<T> { Some(T), None, }
if let来判断枚举类型
if let 匹配值 = 源变量 { 语句块 }
fn main() {
enum Book {
Papery(u32),
Electronic(String)
}
let book = Book::Electronic(String::from("url"));
if let Book::Papery(index) = book { // if let Option::Some(t) = xx 同理
println!("Papery {}", index);
} else {
println!("Not papery book");
}
}
2.任何一门语言都需要错误处理,go里面有error,java里面有异常,rust用枚举类result来进行错误处理。
pub enum Result<T, E> {
Ok(T),
Err(E),
}
一些常用实现方法参考rust doc
结合and_then map_or的使用示例
result, option均实现了and_then map_or func,当返回result<option<t>>嵌套使用时,可如下使用
self.xxxx() // 返回值为result<option<t>>, and_then即当返回为ok时,not err
.and_then(|m|m.map_or(default,|m1|self.xxx(m1)))
.and_then...
用于业务处理存在先后级关系,当前面result ok继续,可使用这种表达方式