组合算子 and_then ()
and_then 是 Rust 中 Option 和 Result 类型的一个常用组合方法,它用于链式处理可能失败的操作。
你可以在任何返回 Option 或 Result 的方法后面使用 .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
};