gpt4 book ai didi

rust - 使用结果迭代器最惯用的方式是什么?

转载 作者:行者123 更新时间:2023-11-29 07:41:53 24 4
gpt4 key购买 nike

<分区>

我有这样的代码:

let things = vec![/* ...*/]; // e.g. Vec<String>
things
.map(|thing| {
let a = try!(do_stuff(thing));
Ok(other_stuff(a))
})
.filter(|thing_result| match *thing_result {
Err(e) => true,
Ok(a) => check(a),
})
.map(|thing_result| {
let a = try!(thing_result);
// do stuff
b
})
.collect::<Result<Vec<_>, _>>()

在语义方面,我想在第一个错误后停止处理。

上面的代码可以,但是感觉挺繁琐的。有没有更好的办法?我查看了文档中类似 filter_if_ok 的内容,但我还没有找到任何东西。

我知道 collect::<Result<Vec<_>, _>> ,而且效果很好。我特别想消除以下样板文件:

  • 在过滤器的闭包中,我必须使用 matchthing_result .我觉得这应该只是一个单行,例如.filter_if_ok(|thing| check(a)) .
  • 每次我使用map , 我必须包括一个额外的声明 let a = try!(thing_result);为了处理 Err 的可能性.同样,我觉得这可以抽象为 .map_if_ok(|thing| ...) .

我可以使用另一种方法来获得这种程度的简洁性,还是我只需要坚持下去?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com