【发布时间】:2025-12-19 15:10:10
【问题描述】:
我正在尝试解析一系列 Json 对象,这些对象可能会取消整个函数。
理想情况下,我会这样做:
fn .... -> Result<Vec<Video>, YoutubeParseError> {
...
let videos = try!(doc.find("items").
and_then(Json::as_array).
ok_or(YoutubeParseError));
Ok(videos.into_iter().
map(|item| try!(json_to_video(item))).
collect())
}
当然,try 不会在错误时逃脱map(),而不是Result<Vec<Video>,_>,我得到Vec<Result<Video,_>>。我可以将其重写为手动迭代,将元素添加到新的 vec 中,但我觉得我缺少一些更简单的处理方式。
是否有一些现有的功能可以让我轻松地从Iter<Result<T>> 到Result<Vec<T>,_>?
【问题讨论】:
-
我不认为第二次尝试!随心所欲地工作。尝试!会让你摆脱封闭。对了,你看过
flat_map
标签: rust