我有一个函数返回一个Result
:
fn find(id: &Id) -> Result<Item, ItemError> {
// ...
}
Run Code Online (Sandbox Code Playgroud)
然后另一个使用它像这样:
let parent_items: Vec<Item> = parent_ids.iter()
.map(|id| find(id).unwrap())
.collect();
Run Code Online (Sandbox Code Playgroud)
如何在任何map
迭代中处理失败的情况?
我知道我可以使用flat_map
,在这种情况下,错误结果将被忽略:
let parent_items: Vec<Item> = parent_ids.iter()
.flat_map(|id| find(id).into_iter())
.collect();
Run Code Online (Sandbox Code Playgroud)
Result
迭代器有0或1个项目,具体取决于成功状态,flat_map
如果为0则会过滤掉它.
但是,我不想忽略错误,我想改为使整个代码块停止并返回一个新错误(基于映射中出现的错误,或者只是转发现有错误).
如何在Rust中最好地处理这个问题?
我正在使用opendir/readdir获取类似linux的系统上的文件列表.看来目录条目按文件名的字母顺序返回.但是,我在手册页中看不到有关此订单的任何内容.
谁能告诉我readdir是否保证订单?