Skip to content

组合算子 and_then ()

and_then 是 Rust 中 OptionResult 类型的一个常用组合方法,它用于链式处理可能失败的操作。

你可以在任何返回 OptionResult 的方法后面使用 .and_then () ,并传入一个闭包。

rust
// 没有 and_then 的繁琐方式
let package = get_package(); // 可能收到包裹,也可能没收到

let content = if let Some(pkg) = package {
    open_package(pkg) // 可能打开成功,也可能失败
} else {
    None
};

// 使用 and_then 的简洁方式
let content = get_package().and_then(|pkg| open_package(pkg)); 
// 如果转成功 →  Some(content),失败 → None

上方的对比可能不够明显,请看下面:

rust
// 使用 and_then 的写法
let result = item.get(key)
    .and_then(|v| v.as_str())
    .map_or(false, |s| s.contains(keyword));

// 等价的手写 if-let 写法
let result = if let Some(value) = item.get(key) {
    if let Some(string) = value.as_str() {
        string.contains(keyword)
    } else {
        false
    }
} else {
    false
};