LingKang的Rust学习日记1 - Option,Result以及and_then,map_or使用

理解基本定义

1. 首先Option是一个rust标准库的一个枚举类,他存在的目的就是为了null值,既不存在的值,go/java都有nil null的存在,于是rust使用option none来表示。

enum Option {
    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 {
    Ok(T),
    Err(E),
}

一些常用实现方法参考rust doc

结合and_then map_or的使用示例

result, option均实现了and_then map_or func,当返回result>嵌套使用时,可如下使用

self.xxxx() // 返回值为result>, and_then即当返回为ok时,not err

.and_then(|m|m.map_or(default,|m1|self.xxx(m1))) 

.and_then...

用于业务处理存在先后级关系,当前面result ok继续,可使用这种表达方式

你可能感兴趣的:(rust学习日记,学习)